summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Kocialkowski <contact@paulk.fr>2012-08-14 13:57:53 +0200
committerPaul Kocialkowski <contact@paulk.fr>2012-08-14 13:57:53 +0200
commit76f203a125733a30964c5696e4dcb60c152db675 (patch)
tree60f2289ef5c28bcd85a6c86706c129810bc3de1e
parent9a5827778189b7e0f91879430a4e160567ee6bbd (diff)
downloadbcm4751-76f203a125733a30964c5696e4dcb60c152db675.tar.gz
bcm4751-76f203a125733a30964c5696e4dcb60c152db675.tar.bz2
bcm4751-76f203a125733a30964c5696e4dcb60c152db675.zip
MEIF: Added NACK structure and a few reasons
Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
-rw-r--r--meif.c26
-rw-r--r--meif.h13
2 files changed, 37 insertions, 2 deletions
diff --git a/meif.c b/meif.c
index 4858550..39e9f62 100644
--- a/meif.c
+++ b/meif.c
@@ -431,6 +431,7 @@ int meif_send_patch(int stage)
int meif_dispatch(struct meif_message *meif_message)
{
struct meif_config_values *config_values;
+ struct meif_nack *nack;
static int patch_send_stage = 0;
switch(meif_message->command) {
@@ -441,13 +442,36 @@ int meif_dispatch(struct meif_message *meif_message)
patch_send_stage = 2;
meif_send_patch(patch_send_stage);
} else if(patch_send_stage == 2) {
+ patch_send_stage = 3;
printf("Ready to switch protocol!\n");
return -1;
}
break;
case MEIF_NACK_MSG:
- printf("Got a NACK message\n\n");
+ printf("Got a NACK message\n");
+
+ if(meif_message->data != NULL && meif_message->length >= sizeof(struct meif_nack)) {
+ nack = (struct meif_nack *) meif_message->data;
+ switch(nack->reason) {
+ case MEIF_NACK_GARBAGE_RECEIVED:
+ printf("Reason is: MEIF_NACK_GARBAGE_RECEIVED\n");
+ break;
+ case MEIF_NACK_CHECKSUM_ERROR:
+ printf("Reason is: MEIF_NACK_CHECKSUM_ERROR\n");
+ if(patch_send_stage > 0) {
+ patch_send_stage = 0;
+ printf("Patch send request failed, aborting!\n");
+ }
+ break;
+ default:
+ printf("Reason is: MEIF_NACK_UNKNOWN\n");
+ break;
+ }
+ }
+
+ printf("\n");
+
break;
case MEIF_STATE_REPORT_MSG:
printf("Got a STATE_REPORT message\n\n");
diff --git a/meif.h b/meif.h
index 7dbb6da..eca8c45 100644
--- a/meif.h
+++ b/meif.h
@@ -42,12 +42,16 @@
* Data
*/
+#define MEIF_NACK_GARBAGE_RECEIVED 0x0003
+#define MEIF_NACK_CHECKSUM_ERROR 0x0102
+
#define MEIF_PATCH_FILE "/data/bcm4751.fw"
#define MEIF_PATCH_LENGTH 2738
#define MEIF_PATCH_PART1_O 0
#define MEIF_PATCH_PART1_L 2042
#define MEIF_PATCH_PART2_O 2044
#define MEIF_PATCH_PART2_L (MEIF_PATCH_LENGTH - MEIF_PATCH_PART2_O)
+
/*
* Structures
*/
@@ -64,8 +68,15 @@ struct meif_message {
void *data;
} __attribute__((__packed__));
+struct meif_nack {
+ uint16_t seq;
+ uint16_t reason;
+ uint16_t unknown;
+} __attribute__((__packed__));
+
struct meif_config_values {
- uint8_t unknown1[36];
+ uint16_t seq;
+ uint8_t unknown1[34];
char vendor[16];
char product[16];
uint8_t unknown2[2];