Пример #1
0
static void sd_release(struct inode * inode, struct file * file)
{
        int target;
	sync_dev(inode->i_rdev);

	target =  DEVICE_NR(MINOR(inode->i_rdev));

	rscsi_disks[target].device->access_count--;

	if(rscsi_disks[target].device->removable) {
	  if(!rscsi_disks[target].device->access_count)
	    sd_ioctl(inode, NULL, SCSI_IOCTL_DOORUNLOCK, 0);
	};
}
Пример #2
0
DRESULT disk_ioctl(BYTE drv, BYTE ctrl,void *buff)
{
    DSTATUS status = RES_PARERR;

    spi1_lock();
    {
        switch(drv)
        {
            case driveNumFlashMem: status = flash_ioctl(ctrl, buff);   break;
            case driveNumSdCard:   status = sd_ioctl(ctrl, buff);      break;
            default:            status = RES_PARERR; break;
        }
    }
    spi1_unlock();

    return status;
}
Пример #3
0
static int sd_open(struct inode * inode, struct file * filp)
{
        int target;
	target =  DEVICE_NR(MINOR(inode->i_rdev));

	if(target >= NR_SD || !rscsi_disks[target].device)
	  return -ENODEV;   /* No such device */
	
/* Make sure that only one process can do a check_change_disk at one time.
 This is also used to lock out further access when the partition table is being re-read. */

	while (rscsi_disks[target].device->busy);

	if(rscsi_disks[target].device->removable) {
	  check_disk_change(inode->i_rdev);

	  if(!rscsi_disks[target].device->access_count)
	    sd_ioctl(inode, NULL, SCSI_IOCTL_DOORLOCK, 0);
	};
	rscsi_disks[target].device->access_count++;
	return 0;
}