int pof_write_open(hysdn_card * card, uchar ** bufp) { struct boot_data *boot; /* pointer to boot specific data */ if (card->boot) { if (card->debug_flags & LOG_POF_OPEN) hysdn_addlog(card, "POF open: already opened for boot"); return (-ERR_ALREADY_BOOT); /* boot already active */ } /* error no mem available */ if (!(boot = kmalloc(sizeof(struct boot_data), GFP_KERNEL))) { if (card->debug_flags & LOG_MEM_ERR) hysdn_addlog(card, "POF open: unable to allocate mem"); return (-EFAULT); } card->boot = boot; card->state = CARD_STATE_BOOTING; memset(boot, 0, sizeof(struct boot_data)); card->stopcard(card); /* first stop the card */ if (card->testram(card)) { if (card->debug_flags & LOG_POF_OPEN) hysdn_addlog(card, "POF open: DPRAM test failure"); boot->last_error = -ERR_BOARD_DPRAM; card->state = CARD_STATE_BOOTERR; /* show boot error */ return (boot->last_error); } boot->BufSize = 0; /* Buffer is empty */ boot->pof_state = POF_READ_FILE_HEAD; /* read file header */ StartDecryption(boot); /* if POF File should be encrypted */ if (card->debug_flags & LOG_POF_OPEN) hysdn_addlog(card, "POF open: success"); *bufp = boot->buf.BootBuf; /* point to buffer */ return (sizeof(tPofFileHdr)); } /* pof_write_open */
int pof_write_open(hysdn_card * card, unsigned char **bufp) { struct boot_data *boot; if (card->boot) { if (card->debug_flags & LOG_POF_OPEN) hysdn_addlog(card, "POF open: already opened for boot"); return (-ERR_ALREADY_BOOT); } if (!(boot = kzalloc(sizeof(struct boot_data), GFP_KERNEL))) { if (card->debug_flags & LOG_MEM_ERR) hysdn_addlog(card, "POF open: unable to allocate mem"); return (-EFAULT); } card->boot = boot; card->state = CARD_STATE_BOOTING; card->stopcard(card); if (card->testram(card)) { if (card->debug_flags & LOG_POF_OPEN) hysdn_addlog(card, "POF open: DPRAM test failure"); boot->last_error = -ERR_BOARD_DPRAM; card->state = CARD_STATE_BOOTERR; return (boot->last_error); } boot->BufSize = 0; boot->pof_state = POF_READ_FILE_HEAD; StartDecryption(boot); if (card->debug_flags & LOG_POF_OPEN) hysdn_addlog(card, "POF open: success"); *bufp = boot->buf.BootBuf; return (sizeof(tPofFileHdr)); }