tag | line | file | source code |
qbase | 140 | drivers/scsi/qlogic.c | static int qbase = 0; /* Port */ |
qbase | 156 | drivers/scsi/qlogic.c | #define REG0 ( outb( inb( qbase + 0xd ) & 0x7f , qbase + 0xd ), outb( 4 , qbase + 0xd )) |
qbase | 157 | drivers/scsi/qlogic.c | #define REG1 ( outb( inb( qbase + 0xd ) | 0x80 , qbase + 0xd ), outb( 0xb4 | QL_INT_ACTIVE_HIGH , qbase + 0xd )) |
qbase | 183 | drivers/scsi/qlogic.c | x = inb(qbase + 0xd); |
qbase | 185 | drivers/scsi/qlogic.c | outb(3, qbase + 3); /* reset SCSI */ |
qbase | 186 | drivers/scsi/qlogic.c | outb(2, qbase + 3); /* reset chip */ |
qbase | 202 | drivers/scsi/qlogic.c | if( reqlen >= 128 && (inb( qbase + 8 ) & 2) ) { /* full */ |
qbase | 203 | drivers/scsi/qlogic.c | insl( qbase + 4, request, 32 ); |
qbase | 208 | drivers/scsi/qlogic.c | if( (j=inb( qbase + 8 )) & 4 ) { |
qbase | 209 | drivers/scsi/qlogic.c | insl( qbase + 4, request, 21 ); |
qbase | 213 | drivers/scsi/qlogic.c | if( reqlen >= 44 && (inb( qbase + 8 ) & 8) ) { /* 1/3 */ |
qbase | 214 | drivers/scsi/qlogic.c | insl( qbase + 4, request, 11 ); |
qbase | 225 | drivers/scsi/qlogic.c | while ( reqlen && !( (j=inb(qbase + 8)) & 0x10 ) ) { |
qbase | 226 | drivers/scsi/qlogic.c | *request++ = inb(qbase + 4); |
qbase | 230 | drivers/scsi/qlogic.c | j = inb(qbase+8); |
qbase | 237 | drivers/scsi/qlogic.c | if( reqlen >= 128 && inb( qbase + 8 ) & 0x10 ) { /* empty */ |
qbase | 238 | drivers/scsi/qlogic.c | outsl(qbase + 4, request, 32 ); |
qbase | 243 | drivers/scsi/qlogic.c | if( !((j=inb( qbase + 8 )) & 8) ) { |
qbase | 244 | drivers/scsi/qlogic.c | outsl( qbase + 4, request, 21 ); |
qbase | 248 | drivers/scsi/qlogic.c | if( reqlen >= 40 && !(inb( qbase + 8 ) & 4 ) ) { /* 2/3 */ |
qbase | 249 | drivers/scsi/qlogic.c | outsl( qbase + 4, request, 10 ); |
qbase | 259 | drivers/scsi/qlogic.c | while ( reqlen && !( (j=inb(qbase + 8)) & 2 ) ) { |
qbase | 260 | drivers/scsi/qlogic.c | outb(*request++, qbase + 4); |
qbase | 264 | drivers/scsi/qlogic.c | j = inb(qbase+8); |
qbase | 268 | drivers/scsi/qlogic.c | return inb( qbase + 8 ) & 0xc0; |
qbase | 278 | drivers/scsi/qlogic.c | while ( i > jiffies && !qabort && !((k = inb(qbase + 4)) & 0xe0)) |
qbase | 306 | drivers/scsi/qlogic.c | inb(qbase + 5); /* clear interrupts */ |
qbase | 307 | drivers/scsi/qlogic.c | if (inb(qbase + 5)) /* if still interrupting */ |
qbase | 308 | drivers/scsi/qlogic.c | outb(2, qbase + 3); /* reset chip */ |
qbase | 309 | drivers/scsi/qlogic.c | else if (inb(qbase + 7) & 0x1f) |
qbase | 310 | drivers/scsi/qlogic.c | outb(1, qbase + 3); /* clear fifo */ |
qbase | 311 | drivers/scsi/qlogic.c | while (inb(qbase + 5)); /* clear ints */ |
qbase | 313 | drivers/scsi/qlogic.c | outb(1, qbase + 8); /* set for PIO pseudo DMA */ |
qbase | 314 | drivers/scsi/qlogic.c | outb(0, qbase + 0xb); /* disable ints */ |
qbase | 315 | drivers/scsi/qlogic.c | inb(qbase + 8); /* clear int bits */ |
qbase | 317 | drivers/scsi/qlogic.c | outb(0x40, qbase + 0xb); /* enable features */ |
qbase | 320 | drivers/scsi/qlogic.c | outb( qlcfgc , qbase + 0xc); |
qbase | 322 | drivers/scsi/qlogic.c | outb( 0x40 | qlcfg8 | qinitid, qbase + 8); |
qbase | 323 | drivers/scsi/qlogic.c | outb( qlcfg7 , qbase + 7 ); |
qbase | 324 | drivers/scsi/qlogic.c | outb( qlcfg6 , qbase + 6 ); |
qbase | 326 | drivers/scsi/qlogic.c | outb(qlcfg5, qbase + 5); /* select timer */ |
qbase | 327 | drivers/scsi/qlogic.c | outb(qlcfg9 & 7, qbase + 9); /* prescaler */ |
qbase | 329 | drivers/scsi/qlogic.c | outb(cmd->target, qbase + 4); |
qbase | 332 | drivers/scsi/qlogic.c | outb(cmd->cmnd[i], qbase + 2); |
qbase | 334 | drivers/scsi/qlogic.c | outb(0x41, qbase + 3); /* select and send command */ |
qbase | 351 | drivers/scsi/qlogic.c | j = inb(qbase + 6); |
qbase | 352 | drivers/scsi/qlogic.c | i = inb(qbase + 5); |
qbase | 356 | drivers/scsi/qlogic.c | i |= inb(qbase + 5); /* the 0x10 bit can be set after the 0x08 */ |
qbase | 368 | drivers/scsi/qlogic.c | printk("Ql:Bad sequence for command %d, int %02X, cmdleft = %d\n", j, i, inb( qbase+7 ) & 0x1f ); |
qbase | 373 | drivers/scsi/qlogic.c | if (inb(qbase + 7) & 0x1f) /* if some bytes in fifo */ |
qbase | 374 | drivers/scsi/qlogic.c | outb(1, qbase + 3); /* clear fifo */ |
qbase | 378 | drivers/scsi/qlogic.c | if (reqlen && !((phase = inb(qbase + 4)) & 6)) { /* data phase */ |
qbase | 380 | drivers/scsi/qlogic.c | outb(reqlen, qbase); /* low-mid xfer cnt */ |
qbase | 381 | drivers/scsi/qlogic.c | outb(reqlen >> 8, qbase+1); /* low-mid xfer cnt */ |
qbase | 382 | drivers/scsi/qlogic.c | outb(reqlen >> 16, qbase + 0xe); /* high xfer cnt */ |
qbase | 383 | drivers/scsi/qlogic.c | outb(0x90, qbase + 3); /* command do xfer */ |
qbase | 406 | drivers/scsi/qlogic.c | k = inb(qbase + 5); /* should be 0x10, bus service */ |
qbase | 410 | drivers/scsi/qlogic.c | while ( k > jiffies && !qabort && !(inb(qbase + 4) & 6)); /* wait for status phase */ |
qbase | 415 | drivers/scsi/qlogic.c | while (inb(qbase + 5)); /* clear pending ints */ |
qbase | 418 | drivers/scsi/qlogic.c | outb(0x11, qbase + 3); /* get status and message */ |
qbase | 421 | drivers/scsi/qlogic.c | i = inb(qbase + 5); /* get chip irq stat */ |
qbase | 422 | drivers/scsi/qlogic.c | j = inb(qbase + 7) & 0x1f; /* and bytes rec'd */ |
qbase | 423 | drivers/scsi/qlogic.c | status = inb(qbase + 2); |
qbase | 424 | drivers/scsi/qlogic.c | message = inb(qbase + 2); |
qbase | 430 | drivers/scsi/qlogic.c | outb(0x12, qbase + 3); /* done, disconnect */ |
qbase | 435 | drivers/scsi/qlogic.c | i = inb(qbase + 5); /* should be bus service */ |
qbase | 438 | drivers/scsi/qlogic.c | i |= inb(qbase + 5); |
qbase | 453 | drivers/scsi/qlogic.c | if (!(inb(qbase + 4) & 0x80)) /* false alarm? */ |
qbase | 458 | drivers/scsi/qlogic.c | while (i-- && inb(qbase + 5)); /* maybe also ql_zap() */ |
qbase | 529 | drivers/scsi/qlogic.c | qbase=port; |
qbase | 553 | drivers/scsi/qlogic.c | if( !qbase ) { |
qbase | 554 | drivers/scsi/qlogic.c | for (qbase = 0x230; qbase < 0x430; qbase += 0x100) { |
qbase | 555 | drivers/scsi/qlogic.c | if( check_region( qbase , 0x10 ) ) |
qbase | 558 | drivers/scsi/qlogic.c | if ( ( (inb(qbase + 0xe) ^ inb(qbase + 0xe)) == 7 ) |
qbase | 559 | drivers/scsi/qlogic.c | && ( (inb(qbase + 0xe) ^ inb(qbase + 0xe)) == 7 ) ) |
qbase | 562 | drivers/scsi/qlogic.c | if (qbase == 0x430) |
qbase | 566 | drivers/scsi/qlogic.c | printk( "Ql: Using preset base address of %03x\n", qbase ); |
qbase | 568 | drivers/scsi/qlogic.c | qltyp = inb(qbase + 0xe) & 0xf8; |
qbase | 572 | drivers/scsi/qlogic.c | outb(1, qbase + 8); /* set for PIO pseudo DMA */ |
qbase | 574 | drivers/scsi/qlogic.c | outb(0x40 | qlcfg8 | qinitid, qbase + 8); /* (ini) bus id, disable scsi rst */ |
qbase | 575 | drivers/scsi/qlogic.c | outb(qlcfg5, qbase + 5); /* select timer */ |
qbase | 576 | drivers/scsi/qlogic.c | outb(qlcfg9, qbase + 9); /* prescaler */ |
qbase | 578 | drivers/scsi/qlogic.c | outb( 3 , qbase + 3 ); |
qbase | 580 | drivers/scsi/qlogic.c | while( inb( qbase + 0xf ) & 4 ); |
qbase | 591 | drivers/scsi/qlogic.c | outb(0x90, qbase + 3); /* illegal command - cause interrupt */ |
qbase | 596 | drivers/scsi/qlogic.c | outb(0xb0 | QL_INT_ACTIVE_HIGH , qbase + 0xd); /* int pin off */ |
qbase | 598 | drivers/scsi/qlogic.c | outb(0xb4 | QL_INT_ACTIVE_HIGH , qbase + 0xd); /* int pin on */ |
qbase | 602 | drivers/scsi/qlogic.c | while (inb(qbase + 5)); /* purge int */ |
qbase | 615 | drivers/scsi/qlogic.c | request_region( qbase , 0x10 ,"qlogic"); |
qbase | 617 | drivers/scsi/qlogic.c | hreg->io_port = qbase; |
qbase | 624 | drivers/scsi/qlogic.c | qltyp, qbase, qlirq, QL_TURBO_PDMA ); |