]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - common/cmd_fdc.c
cmd_bdinfo: simplify local static funcs a bit
[karo-tx-uboot.git] / common / cmd_fdc.c
index 486d5d4844790e3dbfefaf1a450d1c320bd48f39..4fe410dd327d5a1b47d48615dd9dd1df9bf33a00 100644 (file)
@@ -428,8 +428,8 @@ int fdc_terminate(FDC_COMMAND_STRUCT *pCMD)
 int fdc_read_data(unsigned char *buffer, unsigned long blocks,FDC_COMMAND_STRUCT *pCMD, FD_GEO_STRUCT *pFG)
 {
   /* first seek to start address */
-       unsigned long len,lastblk,readblk,i,timeout,ii,offset;
-       unsigned char pcn,c,retriesrw,retriescal;
+       unsigned long len,readblk,i,timeout,ii,offset;
+       unsigned char c,retriesrw,retriescal;
        unsigned char *bufferw; /* working buffer */
        int sect_size;
        int flags;
@@ -442,18 +442,19 @@ int fdc_read_data(unsigned char *buffer, unsigned long blocks,FDC_COMMAND_STRUCT
        offset=0;
        if(fdc_seek(pCMD,pFG)==FALSE) {
                stop_fdc_drive(pCMD);
-               enable_interrupts();
+               if (flags)
+                       enable_interrupts();
                return FALSE;
        }
        if((pCMD->result[STATUS_0]&0x20)!=0x20) {
                printf("Seek error Status: %02X\n",pCMD->result[STATUS_0]);
                stop_fdc_drive(pCMD);
-               enable_interrupts();
+               if (flags)
+                       enable_interrupts();
                return FALSE;
        }
-       pcn=pCMD->result[STATUS_PCN]; /* current track */
        /* now determine the next seek point */
-       lastblk=pCMD->blnr + blocks;
+       /*      lastblk=pCMD->blnr + blocks; */
        /*      readblk=(pFG->head*pFG->sect)-(pCMD->blnr%(pFG->head*pFG->sect)); */
        readblk=pFG->sect-(pCMD->blnr%pFG->sect);
        PRINTF("1st nr of block possible read %ld start %ld\n",readblk,pCMD->blnr);
@@ -467,7 +468,8 @@ retryrw:
                pCMD->cmd[COMMAND]=FDC_CMD_READ;
                if(fdc_issue_cmd(pCMD,pFG)==FALSE) {
                        stop_fdc_drive(pCMD);
-                       enable_interrupts();
+                       if (flags)
+                               enable_interrupts();
                        return FALSE;
                }
                for (i=0;i<len;i++) {
@@ -488,14 +490,16 @@ retryrw:
                                        if(retriesrw++>FDC_RW_RETRIES) {
                                                if (retriescal++>FDC_CAL_RETRIES) {
                                                        stop_fdc_drive(pCMD);
-                                                       enable_interrupts();
+                                                       if (flags)
+                                                               enable_interrupts();
                                                        return FALSE;
                                                }
                                                else {
                                                        PRINTF(" trying to recalibrate Try %d\n",retriescal);
                                                        if(fdc_recalibrate(pCMD,pFG)==FALSE) {
                                                                stop_fdc_drive(pCMD);
-                                                               enable_interrupts();
+                                                               if (flags)
+                                                                       enable_interrupts();
                                                                return FALSE;
                                                        }
                                                        retriesrw=0;
@@ -528,7 +532,8 @@ retrycal:
                /* a seek is necessary */
                if(fdc_seek(pCMD,pFG)==FALSE) {
                        stop_fdc_drive(pCMD);
-                       enable_interrupts();
+                       if (flags)
+                               enable_interrupts();
                        return FALSE;
                }
                if((pCMD->result[STATUS_0]&0x20)!=0x20) {
@@ -536,10 +541,10 @@ retrycal:
                        stop_fdc_drive(pCMD);
                        return FALSE;
                }
-               pcn=pCMD->result[STATUS_PCN]; /* current track */
        }while(TRUE); /* start over */
        stop_fdc_drive(pCMD); /* switch off drive */
-       enable_interrupts();
+       if (flags)
+               enable_interrupts();
        return TRUE;
 }
 
@@ -721,8 +726,6 @@ int do_fdcboot (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        image_header_t *hdr;  /* used for fdc boot */
        unsigned char boot_drive;
        int i,nrofblk;
-       char *ep;
-       int rcode = 0;
 #if defined(CONFIG_FIT)
        const void *fit_hdr = NULL;
 #endif
@@ -741,8 +744,7 @@ int do_fdcboot (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                boot_drive=simple_strtoul(argv[2], NULL, 10);
                break;
        default:
-               cmd_usage(cmdtp);
-               return 1;
+               return cmd_usage(cmdtp);
        }
        /* setup FDC and scan for drives  */
        if(fdc_setup(boot_drive,pCMD,pFG)==FALSE) {
@@ -824,20 +826,7 @@ int do_fdcboot (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        /* Loading ok, update default load address */
        load_addr = addr;
 
-       /* Check if we should attempt an auto-start */
-       if (((ep = getenv("autostart")) != NULL) && (strcmp(ep,"yes") == 0)) {
-               char *local_args[2];
-               extern int do_bootm (cmd_tbl_t *, int, int, char *[]);
-
-               local_args[0] = argv[0];
-               local_args[1] = NULL;
-
-               printf ("Automatic boot of image at addr 0x%08lX ...\n", addr);
-
-               do_bootm (cmdtp, 0, 1, local_args);
-               rcode ++;
-       }
-       return rcode;
+       return bootm_maybe_autostart(cmdtp, argv[0]);
 }
 
 U_BOOT_CMD(