Lines Matching refs:pCMD

249 int fdc_issue_cmd(FDC_COMMAND_STRUCT *pCMD,FD_GEO_STRUCT *pFG)  in fdc_issue_cmd()  argument
253 track = pCMD->blnr / (pFG->sect * pFG->head); /* track nr */ in fdc_issue_cmd()
254 sect = pCMD->blnr % (pFG->sect * pFG->head); /* remaining blocks */ in fdc_issue_cmd()
259 pCMD->cmd[0],track,head,sect,pCMD->drive,pCMD->blnr); in fdc_issue_cmd()
262 pCMD->cmd[DRIVE]=pCMD->drive | 0x04; /* head 1 */ in fdc_issue_cmd()
263 pCMD->cmd[HEAD]=(unsigned char) head; /* head register */ in fdc_issue_cmd()
266 pCMD->cmd[DRIVE]=pCMD->drive; /* head 0 */ in fdc_issue_cmd()
267 pCMD->cmd[HEAD]=(unsigned char) head; /* head register */ in fdc_issue_cmd()
269 pCMD->cmd[TRACK]=(unsigned char) track; /* track */ in fdc_issue_cmd()
270 switch (pCMD->cmd[COMMAND]) { in fdc_issue_cmd()
272 pCMD->cmd[SECTOR]=(unsigned char) sect; /* sector */ in fdc_issue_cmd()
273 pCMD->cmd[SECTOR_SIZE]=pFG->sect_code; /* sector size code */ in fdc_issue_cmd()
274 pCMD->cmd[LAST_TRACK]=pFG->sect; /* End of track */ in fdc_issue_cmd()
275 pCMD->cmd[GAP]=pFG->gap; /* gap */ in fdc_issue_cmd()
276 pCMD->cmd[DTL]=0xFF; /* DTL */ in fdc_issue_cmd()
277 pCMD->cmdlen=FDC_CMD_READ_LEN; in fdc_issue_cmd()
278 pCMD->cmd[COMMAND]|=(FDC_MFM_MODE<<6); /* set MFM bit */ in fdc_issue_cmd()
279 pCMD->cmd[COMMAND]|=(FDC_SKIP_MODE<<5); /* set Skip bit */ in fdc_issue_cmd()
280 pCMD->resultlen=0; /* result only after execution */ in fdc_issue_cmd()
283 pCMD->cmdlen=FDC_CMD_SEEK_LEN; in fdc_issue_cmd()
284 pCMD->resultlen=0; /* no result */ in fdc_issue_cmd()
287 pCMD->cmd[CONFIG0]=0; in fdc_issue_cmd()
288 pCMD->cmd[CONFIG1]=FDC_CONFIGURE; /* FIFO Threshold, Poll, Enable FIFO */ in fdc_issue_cmd()
289 pCMD->cmd[CONFIG2]=FDC_PRE_TRK; /* Precompensation Track */ in fdc_issue_cmd()
290 pCMD->cmdlen=FDC_CMD_CONFIGURE_LEN; in fdc_issue_cmd()
291 pCMD->resultlen=0; /* no result */ in fdc_issue_cmd()
294 pCMD->cmd[SPEC_HUTSRT]=pFG->spec1; in fdc_issue_cmd()
295 pCMD->cmd[SPEC_HLT]=(pFG->hlt)<<1; /* head load time */ in fdc_issue_cmd()
296 if(pCMD->dma==0) in fdc_issue_cmd()
297 pCMD->cmd[SPEC_HLT]|=0x1; /* no dma */ in fdc_issue_cmd()
298 pCMD->cmdlen=FDC_CMD_SPECIFY_LEN; in fdc_issue_cmd()
299 pCMD->resultlen=0; /* no result */ in fdc_issue_cmd()
302 pCMD->cmdlen=FDC_CMD_DUMP_REG_LEN; in fdc_issue_cmd()
303 pCMD->resultlen=10; /* 10 byte result */ in fdc_issue_cmd()
306 pCMD->cmd[COMMAND]|=(FDC_MFM_MODE<<6); /* set MFM bit */ in fdc_issue_cmd()
307 pCMD->cmdlen=FDC_CMD_READ_ID_LEN; in fdc_issue_cmd()
308 pCMD->resultlen=7; /* 7 byte result */ in fdc_issue_cmd()
311 pCMD->cmd[DRIVE]&=0x03; /* don't set the head bit */ in fdc_issue_cmd()
312 pCMD->cmdlen=FDC_CMD_RECALIBRATE_LEN; in fdc_issue_cmd()
313 pCMD->resultlen=0; /* no result */ in fdc_issue_cmd()
317 pCMD->cmdlen=FDC_CMD_SENSE_INT_LEN; in fdc_issue_cmd()
318 pCMD->resultlen=2; in fdc_issue_cmd()
321 for(i=0;i<pCMD->cmdlen;i++) { in fdc_issue_cmd()
323 if (write_fdc_byte(pCMD->cmd[i]) == false) { in fdc_issue_cmd()
329 for(i=0;i<pCMD->resultlen;i++) { in fdc_issue_cmd()
337 pCMD->result[i]=(unsigned char)read_fdc_byte(); in fdc_issue_cmd()
344 void select_fdc_drive(FDC_COMMAND_STRUCT *pCMD) in select_fdc_drive() argument
348 val=(1<<(4+pCMD->drive))|pCMD->drive|0xC; /* set reset, dma gate and motor bits */ in select_fdc_drive()
357 void stop_fdc_drive(FDC_COMMAND_STRUCT *pCMD) in stop_fdc_drive() argument
361 val=(1<<(4+pCMD->drive))|pCMD->drive; /* sets motor bits */ in stop_fdc_drive()
367 int fdc_recalibrate(FDC_COMMAND_STRUCT *pCMD,FD_GEO_STRUCT *pFG) in fdc_recalibrate() argument
369 pCMD->cmd[COMMAND]=FDC_CMD_RECALIBRATE; in fdc_recalibrate()
370 if (fdc_issue_cmd(pCMD, pFG) == false) in fdc_recalibrate()
374 pCMD->cmd[COMMAND]=FDC_CMD_SENSE_INT; in fdc_recalibrate()
375 return(fdc_issue_cmd(pCMD,pFG)); in fdc_recalibrate()
380 int fdc_seek(FDC_COMMAND_STRUCT *pCMD,FD_GEO_STRUCT *pFG) in fdc_seek() argument
382 pCMD->cmd[COMMAND]=FDC_CMD_SEEK; in fdc_seek()
383 if (fdc_issue_cmd(pCMD, pFG) == false) in fdc_seek()
387 pCMD->cmd[COMMAND]=FDC_CMD_SENSE_INT; in fdc_seek()
388 return(fdc_issue_cmd(pCMD,pFG)); in fdc_seek()
393 int fdc_terminate(FDC_COMMAND_STRUCT *pCMD) in fdc_terminate() argument
400 pCMD->result[i]=(unsigned char)read_fdc_byte(); in fdc_terminate()
406 int fdc_read_data(unsigned char *buffer, unsigned long blocks,FDC_COMMAND_STRUCT *pCMD, FD_GEO_STRU… in fdc_read_data() argument
416 select_fdc_drive(pCMD); /* switch on drive */ in fdc_read_data()
421 if (fdc_seek(pCMD, pFG) == false) { in fdc_read_data()
422 stop_fdc_drive(pCMD); in fdc_read_data()
427 if((pCMD->result[STATUS_0]&0x20)!=0x20) { in fdc_read_data()
428 printf("Seek error Status: %02X\n",pCMD->result[STATUS_0]); in fdc_read_data()
429 stop_fdc_drive(pCMD); in fdc_read_data()
437 readblk=pFG->sect-(pCMD->blnr%pFG->sect); in fdc_read_data()
438 PRINTF("1st nr of block possible read %ld start %ld\n",readblk,pCMD->blnr); in fdc_read_data()
441 PRINTF("we read %ld blocks start %ld\n",readblk,pCMD->blnr); in fdc_read_data()
446 pCMD->cmd[COMMAND]=FDC_CMD_READ; in fdc_read_data()
447 if (fdc_issue_cmd(pCMD, pFG) == false) { in fdc_read_data()
448 stop_fdc_drive(pCMD); in fdc_read_data()
465 pCMD->result[ii]=bufferw[(i-7+ii)]; in fdc_read_data()
470 stop_fdc_drive(pCMD); in fdc_read_data()
477 if (fdc_recalibrate(pCMD, pFG) == false) { in fdc_read_data()
478 stop_fdc_drive(pCMD); in fdc_read_data()
497 fdc_terminate(pCMD); in fdc_read_data()
500 pCMD->blnr+=readblk; /* update current block nr */ in fdc_read_data()
511 if (fdc_seek(pCMD, pFG) == false) { in fdc_read_data()
512 stop_fdc_drive(pCMD); in fdc_read_data()
517 if((pCMD->result[STATUS_0]&0x20)!=0x20) { in fdc_read_data()
518 PRINTF("Seek error Status: %02X\n",pCMD->result[STATUS_0]); in fdc_read_data()
519 stop_fdc_drive(pCMD); in fdc_read_data()
523 stop_fdc_drive(pCMD); /* switch off drive */ in fdc_read_data()
530 int fdc_check_drive(FDC_COMMAND_STRUCT *pCMD, FD_GEO_STRUCT *pFG) in fdc_check_drive() argument
537 pCMD->drive=drives; in fdc_check_drive()
538 select_fdc_drive(pCMD); in fdc_check_drive()
539 pCMD->blnr=0; /* set to the 1st block */ in fdc_check_drive()
540 if (fdc_recalibrate(pCMD, pFG) == false) in fdc_check_drive()
542 if((pCMD->result[STATUS_0]&0x10)==0x10) in fdc_check_drive()
546 pCMD->blnr=pFG->size; /* set to the last block */ in fdc_check_drive()
547 if (fdc_seek(pCMD, pFG) == false) in fdc_check_drive()
549 pCMD->blnr=0; /* set to the 1st block */ in fdc_check_drive()
550 if (fdc_recalibrate(pCMD, pFG) == false) in fdc_check_drive()
552 pCMD->cmd[COMMAND]=FDC_CMD_READ_ID; in fdc_check_drive()
553 if (fdc_issue_cmd(pCMD, pFG) == false) in fdc_check_drive()
557 stop_fdc_drive(pCMD); in fdc_check_drive()
564 pCMD->flags=state; in fdc_check_drive()
574 int fdc_setup(int drive, FDC_COMMAND_STRUCT *pCMD, FD_GEO_STRUCT *pFG) in fdc_setup() argument
586 pCMD->drive=drive; in fdc_setup()
587 select_fdc_drive(pCMD); in fdc_setup()
598 pCMD->dma=0; /* we don't use any dma at all */ in fdc_setup()
601 pCMD->cmd[COMMAND]=FDC_CMD_SENSE_INT; in fdc_setup()
602 if (fdc_issue_cmd(pCMD, pFG) == false) { in fdc_setup()
607 pCMD->drive=drive; in fdc_setup()
608 select_fdc_drive(pCMD); in fdc_setup()
609 pCMD->cmd[COMMAND]=FDC_CMD_CONFIGURE; in fdc_setup()
610 if (fdc_issue_cmd(pCMD, pFG) == false) { in fdc_setup()
612 stop_fdc_drive(pCMD); in fdc_setup()
616 pCMD->cmd[COMMAND]=FDC_CMD_SPECIFY; in fdc_setup()
617 if (fdc_issue_cmd(pCMD, pFG) == false) { in fdc_setup()
619 stop_fdc_drive(pCMD); in fdc_setup()
636 FDC_COMMAND_STRUCT *pCMD = &cmd; in do_fdcboot() local
664 if (fdc_setup(boot_drive, pCMD, pFG) == false) { in do_fdcboot()
668 if (fdc_check_drive(pCMD, pFG) == false) { in do_fdcboot()
672 if((pCMD->flags&(1<<boot_drive))==0) { in do_fdcboot()
677 if((pCMD->flags&(0x10<<boot_drive))==0) { in do_fdcboot()
683 pCMD->drive=boot_drive; in do_fdcboot()
685 pCMD->blnr=0; in do_fdcboot()
686 if (fdc_read_data((unsigned char *)addr, 1, pCMD, pFG) == false) { in do_fdcboot()
689 printf("result%d: 0x%02X\n",i,pCMD->result[i]); in do_fdcboot()
719 pCMD->blnr=0; in do_fdcboot()
720 if (fdc_read_data((unsigned char *)addr, nrofblk, pCMD, pFG) == false) { in do_fdcboot()
724 printf("result%d: 0x%02X\n",i,pCMD->result[i]); in do_fdcboot()