@@ -186,34 +186,16 @@ typedef enum {
186
186
EnumFileSystemMax
187
187
} SBL_OS_FILE_SYSTEM_TYPE ;
188
188
189
- static BOOLEAN capsule_request_slot_b ;
190
-
191
189
static EFI_STATUS cse4sbl_capsule_msg_write (CSE_MSG * msg )
192
190
{
193
- uint8_t * msg_buf , * msg_buf_p , msg_slen ;
191
+ uint8_t * msg_buf ;
194
192
unsigned status ;
195
193
196
- // It's temporary patch before SBL officially support HECI cmd trigger fw update"
197
- outb (0x40 , 0x70 );
198
- if (capsule_request_slot_b ) {
199
- ewdbg ("%s: Capsule requested, set CMOS 0x5B value for ICL KBL hack" ,__func__ );
200
- outb (0x5B , 0x71 );
201
- } else {
202
- ewdbg ("%s: Capsule requested, set CMOS 0x5A value for ICL KBL hack" ,__func__ );
203
- outb (0x5A , 0x71 );
204
- }
205
- return EFI_SUCCESS ;
206
-
207
194
msg_buf = malloc (CSE_USRCMD_SIZE );
208
195
if (!msg_buf )
209
196
return EFI_OUT_OF_RESOURCES ;
210
- memset (msg_buf , 0 , CSE_USRCMD_SIZE );
211
- msg_buf_p = msg_buf ;
212
197
213
- msg_slen = offsetof(CSE_MSG , cdata_payload );
214
- msg_buf_p = (uint8_t * )memcpy (msg_buf_p , (uint8_t * )msg , msg_slen ) + msg_slen ;
215
- msg_slen = msg -> cdata_payload_size ;
216
- msg_buf_p = (uint8_t * )memcpy (msg_buf_p , msg -> cdata_payload , msg_slen ) + msg_slen ;
198
+ memcpy (msg_buf , (uint8_t * )msg , sizeof (CSE_MSG ));
217
199
218
200
status = heci_send_user_command (msg_buf , CSE_USRCMD_SIZE );
219
201
@@ -241,10 +223,6 @@ static EFI_STATUS cse4sbl_capsule_cmd_create(CSE_CMD **cmd, size_t *cmd_size, co
241
223
ewdbg ("capsule buffer: %s" , buf ); /* Buffer format example: "m1:@0" */
242
224
243
225
partition = buf [1 ] - '0' ;
244
- if (partition == 2 )
245
- capsule_request_slot_b = TRUE;
246
- else
247
- capsule_request_slot_b = FALSE;
248
226
memset (name , 0 , sizeof (name ));
249
227
strncpy (name , buf + 3 , sizeof (name ) - 1 ); /* Number 3 is start index of name in buffer. */
250
228
@@ -263,56 +241,44 @@ static EFI_STATUS cse4sbl_capsule_cmd_create(CSE_CMD **cmd, size_t *cmd_size, co
263
241
264
242
(* cmd )-> dev_addr = boot_dev -> diskbus ;
265
243
(* cmd )-> dev_type = device_map [boot_dev -> type ];
266
- (* cmd )-> fs_type = (uint8_t )EnumFileSystemTypeAuto ;
244
+ if (buf [0 ] == 'm' )
245
+ (* cmd )-> fs_type = EnumFileSystemMax ;
246
+ else
247
+ (* cmd )-> fs_type = EnumFileSystemTypeFat ;
248
+
249
+ if (name [0 ] == '@' )
250
+ (* cmd )-> LbaAddr = strtoull (name + 1 , NULL , 0 );
251
+ else {
252
+ memset ((* cmd )-> FileName , 0 , MAX_FILE_LEN );
253
+ strncpy ((char * )(* cmd )-> FileName , name , MAX_FILE_LEN - 1 );
254
+ }
255
+
267
256
(* cmd )-> hw_part = 0 ;
268
257
(* cmd )-> sw_part = partition ;
269
- (* cmd )-> file_path .image_lba_addr = strtoull (name + 1 , NULL , 16 );
270
- (* cmd )-> file_path .image_length = 0 ;
271
- (* cmd )-> file_path .reserved = 0 ;
272
258
return EFI_SUCCESS ;
273
259
}
274
260
275
- static int get_cse_msg_sum (CSE_MSG * msg , CSE_CMD * cmd , size_t cmd_size )
276
- {
277
- size_t i = 0 ;
278
- char * p = NULL , sum = 0 ;
279
-
280
- p = (char * )msg ;
281
- for (i = 0 ; i < offsetof(CSE_MSG , cdata_payload ); ++ i )
282
- sum += p [i ];
283
-
284
- sum -= msg -> check_sum ;
285
-
286
- p = (char * )cmd ;
287
- for (i = 0 ; i < cmd_size ; ++ i )
288
- sum += p [i ];
289
-
290
- return - sum ;
291
- }
292
-
293
261
/* If multiple payload is needed, the cmd and cmd_size could be changed to array */
294
- static EFI_STATUS cse4sbl_capsule_msg_create (CSE_MSG * * msg , CSE_CMD * cmd , size_t cmd_size )
262
+ static EFI_STATUS cse4sbl_capsule_msg_create (CSE_MSG * * msg , CSE_CMD * cmd , __attribute__(( __unused__ )) size_t cmd_size )
295
263
{
296
- union _cdata_header cdh ;
297
-
298
- cdh .data = 0 ;
299
- cdh .tag = CDATA_TAG_USER_CMD ;
300
- cdh .length = (sizeof (cdh ) + cmd_size ) / 4 ;
301
-
302
264
* msg = malloc (sizeof (CSE_MSG ));
303
265
if (!(* msg ))
304
266
return EFI_OUT_OF_RESOURCES ;
305
267
306
- (* msg )-> magic = NVRAM_VALID_FLAG ;
307
- (* msg )-> total_size = offsetof(CSE_MSG , cdata_payload ) + cmd_size ;
308
- (* msg )-> revision = 0 ;
309
- (* msg )-> check_sum = get_cse_msg_sum (* msg , cmd , cmd_size );
268
+ cdata_blob_t * cdb = & (* msg )-> cdb ;
269
+ cdb -> Signature = CFG_DATA_SIGNATURE ;
270
+ cdb -> HeaderLength = sizeof (cdata_blob_t );
271
+ cdb -> UsedLength = sizeof (CSE_MSG );
272
+ cdb -> TotalLength = CSE_USRCMD_SIZE ;
310
273
311
- memset ((* msg )-> reserved , 0 , 2 );
274
+ cdata_header_t * cdh = & (* msg )-> cdh ;
275
+ cdh -> ncond = 1 ;
276
+ cdh -> length = sizeof (cdata_header_t ) + sizeof (CSE_CMD );
277
+ cdh -> version = 1 ;
278
+ cdh -> tag = CDATA_CAPSULE_TAG ;
279
+ cdh -> Condition .Value = 0xFFFFFFFF ;
312
280
313
- (* msg )-> cdata_header .data = cdh .data ;
314
- (* msg )-> cdata_payload = (char * )cmd ;
315
- (* msg )-> cdata_payload_size = cmd_size ;
281
+ memcpy (& ((* msg )-> cmd ), cmd , sizeof (CSE_CMD ));
316
282
317
283
return EFI_SUCCESS ;
318
284
}
0 commit comments