102 lines
2.7 KiB
C
102 lines
2.7 KiB
C
/*
|
|
* 2.5 Command Descriptor Block (CDB) Block Pre-Handler.
|
|
*
|
|
* Copyright (C) 2001 Andre Hedrick <andre@linux-ide.org>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public Licens
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-
|
|
*/
|
|
|
|
#ifndef _LINUX_BLKCDB_H
|
|
#define _LINUX_BLKCDB_H
|
|
|
|
typedef struct cdb_list {
|
|
#if 0
|
|
unsigned char cdb_0;
|
|
unsigned char cdb_1;
|
|
unsigned char cdb_2;
|
|
unsigned char cdb_3;
|
|
unsigned char cdb_4;
|
|
unsigned char cdb_5;
|
|
unsigned char cdb_6;
|
|
unsigned char cdb_7;
|
|
unsigned char cdb_8;
|
|
unsigned char cdb_9;
|
|
unsigned char cdb_10;
|
|
unsigned char cdb_11;
|
|
unsigned char cdb_12;
|
|
unsigned char cdb_13;
|
|
unsigned char cdb_14;
|
|
unsigned char cdb_15;
|
|
#else
|
|
unsigned char cdb_regs[16];
|
|
#endif
|
|
} cdb_list_t;
|
|
|
|
#if 0
|
|
|
|
typedef cdb_list_t * (queue_proc) (kdev_t dev);
|
|
|
|
request_queue_t *ide_get_queue (kdev_t dev)
|
|
{
|
|
ide_hwif_t *hwif = (ide_hwif_t *)blk_dev[MAJOR(dev)].data;
|
|
|
|
return &hwif->drives[DEVICE_NR(dev) & 1].queue;
|
|
}
|
|
|
|
static request_queue_t *sd_find_queue(kdev_t dev)
|
|
{
|
|
Scsi_Disk *dpnt;
|
|
int target;
|
|
target = DEVICE_NR(dev);
|
|
|
|
dpnt = &rscsi_disks[target];
|
|
if (!dpnt)
|
|
return NULL; /* No such device */
|
|
return &dpnt->device->request_queue;
|
|
}
|
|
|
|
prebuilder: NULL,
|
|
block_device_operations
|
|
struct block_device {
|
|
|
|
void do_ide_request(request_queue_t *q)
|
|
|
|
ide_do_request
|
|
|
|
typedef cdb_list_t (request_cdb_proc) (request_queue_t *q);
|
|
|
|
typedef cdb_list_t (request_cdb_proc) (request_queue_t *q);
|
|
typedef void (request_fn_proc) (request_queue_t *q);
|
|
|
|
srb
|
|
|
|
switch (SCpnt->request.cmd)
|
|
SCpnt->cmnd[0] = WRITE_6/READ_6;
|
|
SCpnt->cmnd[1] = (SCpnt->device->scsi_level <= SCSI_2) ?
|
|
((SCpnt->lun << 5) & 0xe0) : 0;
|
|
SCpnt->cmnd[2] = (unsigned char) (block >> 24) & 0xff;
|
|
SCpnt->cmnd[3] = (unsigned char) (block >> 16) & 0xff;
|
|
SCpnt->cmnd[4] = (unsigned char) (block >> 8) & 0xff;
|
|
SCpnt->cmnd[5] = (unsigned char) block & 0xff;
|
|
SCpnt->cmnd[6] = 0;
|
|
SCpnt->cmnd[7] = (unsigned char) (this_count >> 8) & 0xff;
|
|
SCpnt->cmnd[8] = (unsigned char) this_count & 0xff;
|
|
SCpnt->cmnd[9] = 0;
|
|
|
|
#endif
|
|
|
|
#endif /* _LINUX_BLKCDB_H */
|
|
|