⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tape34xx.c

📁 microwindows移植到S3C44B0的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
	ccw->flags = 0;	ccw->count = 0;	ccw->cda = (unsigned long) (&(ccw->cmd_code));	s390irq_spin_lock_irqsave (ti->devinfo.irq, lockflags);	ti->kernbuf = NULL;	ti->userbuf = NULL;	tapestate_set (ti, TS_NOP_INIT);	s390irq_spin_unlock_irqrestore (ti->devinfo.irq, lockflags);#ifdef TAPE_DEBUG	debug_text_event (tape_debug_area,6,"xden ccwg");#endif /* TAPE_DEBUG */	return cqr;}/* * MTSEEK: seek to the specified block. */ccw_req_t *tape34xx_mtseek (tape_info_t * ti, int count){	long lockflags;	__u8 *data;	ccw_req_t *cqr;	ccw1_t *ccw;	if ((data = kmalloc (4 * sizeof (__u8), GFP_KERNEL)) == NULL) {#ifdef TAPE_DEBUG	        debug_text_exception (tape_debug_area,6,"xsee nomem");#endif /* TAPE_DEBUG */		return NULL;	}	data[0] = 0x01;	data[1] = data[2] = data[3] = 0x00;	if (count >= 4194304) {#ifdef TAPE_DEBUG	        debug_text_exception (tape_debug_area,6,"xsee parm");#endif /* TAPE_DEBUG */		kfree(data);		return NULL;	}	if (((tape34xx_disc_data_t *) ti->discdata)->modeset_byte & 0x08)	// IDRC on		data[1] = data[1] | 0x80;	data[3] += count % 256;	data[2] += (count / 256) % 256;	data[1] += (count / 65536);#ifdef TAPE_DEBUG	debug_text_event (tape_debug_area,6,"xsee id:");	debug_int_event (tape_debug_area,6,count);#endif /* TAPE_DEBUG */	cqr = tape_alloc_ccw_req (ti, 3, 0);	if (!cqr) {#ifdef TAPE_DEBUG	        debug_text_exception (tape_debug_area,6,"xsee nomem");#endif /* TAPE_DEBUG */		kfree (data);		return NULL;	}	ccw = cqr->cpaddr;	ccw->cmd_code = MODE_SET_DB;	ccw->flags = CCW_FLAG_CC;	ccw->count = 1;	set_normalized_cda (ccw, (unsigned long) (&(((tape34xx_disc_data_t *) ti->discdata)->modeset_byte)));	ccw++;	ccw->cmd_code = LOCATE;	ccw->flags = CCW_FLAG_CC;	ccw->count = 4;	set_normalized_cda (ccw, (unsigned long) data);	ccw++;	ccw->cmd_code = NOP;	ccw->flags = 0;	ccw->count = 0;	ccw->cda = (unsigned long) (&(ccw->cmd_code));	s390irq_spin_lock_irqsave (ti->devinfo.irq, lockflags);	ti->kernbuf = data;	ti->userbuf = NULL;	tapestate_set (ti, TS_LBL_INIT);	s390irq_spin_unlock_irqrestore (ti->devinfo.irq, lockflags);#ifdef TAPE_DEBUG	debug_text_event (tape_debug_area,6,"xsee ccwg");#endif /* TAPE_DEBUG */	return cqr;}/* * MTTELL: Tell block. Return the number of block relative to current file. */ccw_req_t *tape34xx_mttell (tape_info_t * ti, int count){	long lockflags;	ccw_req_t *cqr;	ccw1_t *ccw;	void *mem;	cqr = tape_alloc_ccw_req (ti, 2, 0);	if (!cqr) {#ifdef TAPE_DEBUG	        debug_text_exception (tape_debug_area,6,"xtel nomem");#endif /* TAPE_DEBUG */		return NULL;	}	mem = kmalloc (8, GFP_KERNEL);	if (!mem) {		tape_free_request (cqr);#ifdef TAPE_DEBUG	        debug_text_exception (tape_debug_area,6,"xtel nomem");#endif /* TAPE_DEBUG */		return NULL;	}	ccw = cqr->cpaddr;	ccw->cmd_code = MODE_SET_DB;	ccw->flags = CCW_FLAG_CC;	ccw->count = 1;	set_normalized_cda (ccw, (unsigned long) (&(((tape34xx_disc_data_t *) ti->discdata)->modeset_byte)));	ccw++;	ccw->cmd_code = READ_BLOCK_ID;	ccw->flags = 0;	ccw->count = 8;	set_normalized_cda (ccw, (unsigned long) mem);	s390irq_spin_lock_irqsave (ti->devinfo.irq, lockflags);	ti->kernbuf = mem;	ti->userbuf = NULL;	tapestate_set (ti, TS_RBI_INIT);	s390irq_spin_unlock_irqrestore (ti->devinfo.irq, lockflags);#ifdef TAPE_DEBUG	debug_text_event (tape_debug_area,6,"xtel ccwg");#endif /* TAPE_DEBUG */	return cqr;}/* * MTSETDRVBUFFER: Set the tape drive buffer code to number. * Implement NOP. */ccw_req_t *tape34xx_mtsetdrvbuffer (tape_info_t * ti, int count){	long lockflags;	ccw_req_t *cqr;	ccw1_t *ccw;	cqr = tape_alloc_ccw_req (ti, 2, 0);	if (!cqr) {#ifdef TAPE_DEBUG	        debug_text_exception (tape_debug_area,6,"xbuf nomem");#endif /* TAPE_DEBUG */		return NULL;	}	ccw = cqr->cpaddr;	ccw->cmd_code = MODE_SET_DB;	ccw->flags = CCW_FLAG_CC;	ccw->count = 1;	set_normalized_cda (ccw, (unsigned long) (&(((tape34xx_disc_data_t *) ti->discdata)->modeset_byte)));	ccw++;	ccw->cmd_code = NOP;	ccw->flags = 0;	ccw->count = 0;	ccw->cda = (unsigned long) (&(ccw->cmd_code));	s390irq_spin_lock_irqsave (ti->devinfo.irq, lockflags);	ti->kernbuf = NULL;	ti->userbuf = NULL;	tapestate_set (ti, TS_NOP_INIT);	s390irq_spin_unlock_irqrestore (ti->devinfo.irq, lockflags);#ifdef TAPE_DEBUG	debug_text_event (tape_debug_area,6,"xbuf ccwg");#endif /* TAPE_DEBUG */	return cqr;}/* * MTLOCK: Locks the tape drive door. * Implement NOP CCW command. */ccw_req_t *tape34xx_mtlock (tape_info_t * ti, int count){	long lockflags;	ccw_req_t *cqr;	ccw1_t *ccw;	cqr = tape_alloc_ccw_req (ti, 2, 0);	if (!cqr) {#ifdef TAPE_DEBUG	        debug_text_exception (tape_debug_area,6,"xloc nomem");#endif /* TAPE_DEBUG */		return NULL;	}	ccw = cqr->cpaddr;	ccw->cmd_code = MODE_SET_DB;	ccw->flags = CCW_FLAG_CC;	ccw->count = 1;	set_normalized_cda (ccw, (unsigned long) (&(((tape34xx_disc_data_t *) ti->discdata)->modeset_byte)));	ccw++;	ccw->cmd_code = NOP;	ccw->flags = 0;	ccw->count = 0;	ccw->cda = (unsigned long) (&(ccw->cmd_code));	s390irq_spin_lock_irqsave (ti->devinfo.irq, lockflags);	ti->kernbuf = NULL;	ti->userbuf = NULL;	tapestate_set (ti, TS_NOP_INIT);	s390irq_spin_unlock_irqrestore (ti->devinfo.irq, lockflags);#ifdef TAPE_DEBUG	debug_text_event (tape_debug_area,6,"xloc ccwg");#endif /* TAPE_DEBUG */	return cqr;}/* * MTUNLOCK: Unlocks the tape drive door. * Implement the NOP CCW command. */ccw_req_t *tape34xx_mtunlock (tape_info_t * ti, int count){	long lockflags;	ccw_req_t *cqr;	ccw1_t *ccw;	cqr = tape_alloc_ccw_req (ti, 2, 0);	if (!cqr) {#ifdef TAPE_DEBUG	        debug_text_exception (tape_debug_area,6,"xulk nomem");#endif /* TAPE_DEBUG */		return NULL;	}	ccw = cqr->cpaddr;	ccw->cmd_code = MODE_SET_DB;	ccw->flags = CCW_FLAG_CC;	ccw->count = 1;	set_normalized_cda (ccw, (unsigned long) (&(((tape34xx_disc_data_t *) ti->discdata)->modeset_byte)));	ccw++;	ccw->cmd_code = NOP;	ccw->flags = 0;	ccw->count = 0;	ccw->cda = (unsigned long) (&(ccw->cmd_code));	s390irq_spin_lock_irqsave (ti->devinfo.irq, lockflags);	ti->kernbuf = NULL;	ti->userbuf = NULL;	tapestate_set (ti, TS_NOP_INIT);	s390irq_spin_unlock_irqrestore (ti->devinfo.irq, lockflags);#ifdef TAPE_DEBUG	debug_text_event (tape_debug_area,6,"xulk ccwg");#endif /* TAPE_DEBUG */	return cqr;}/* * MTLOAD: Loads the tape. * This function is not implemented and returns NULL, which causes the Frontend to wait for a medium being loaded. *  The 3480/3490 type Tapes do not support a load command */ccw_req_t *tape34xx_mtload (tape_info_t * ti, int count){         return NULL;}/* * MTUNLOAD: Rewind the tape and unload it. */ccw_req_t *tape34xx_mtunload (tape_info_t * ti, int count){	long lockflags;	ccw_req_t *cqr;	ccw1_t *ccw;	cqr = tape_alloc_ccw_req (ti, 3, 32);	if (!cqr) {#ifdef TAPE_DEBUG	        debug_text_exception (tape_debug_area,6,"xunl nomem");#endif /* TAPE_DEBUG */		return NULL;	}	ccw = cqr->cpaddr;	ccw->cmd_code = MODE_SET_DB;	ccw->flags = CCW_FLAG_CC;	ccw->count = 1;	set_normalized_cda (ccw, (unsigned long) (&(((tape34xx_disc_data_t *) ti->discdata)->modeset_byte)));	ccw++;	ccw->cmd_code = REWIND_UNLOAD;	ccw->flags = CCW_FLAG_CC;	ccw->count = 1;	ccw->cda = (unsigned long) (&(ccw->cmd_code));	ccw++;	ccw->cmd_code = SENSE;	ccw->flags = 0;	ccw->count = 32;	ccw->cda = (unsigned long) cqr->cpaddr;	s390irq_spin_lock_irqsave (ti->devinfo.irq, lockflags);	ti->kernbuf = NULL;	ti->userbuf = NULL;	tapestate_set (ti, TS_RUN_INIT);	s390irq_spin_unlock_irqrestore (ti->devinfo.irq, lockflags);#ifdef TAPE_DEBUG	debug_text_event (tape_debug_area,6,"xunl ccwg");#endif /* TAPE_DEBUG */	return cqr;}/* * MTCOMPRESSION: used to enable compression. * Sets the IDRC on/off. */ccw_req_t *tape34xx_mtcompression (tape_info_t * ti, int count){	long lockflags;	ccw_req_t *cqr;	ccw1_t *ccw;	if ((count < 0) || (count > 1)) {#ifdef TAPE_DEBUG	        debug_text_exception (tape_debug_area,6,"xcom parm");#endif /* TAPE_DEBUG */		return NULL;	}	if (count == 0)		((tape34xx_disc_data_t *) ti->discdata)->modeset_byte = 0x00;		// IDRC off	else		((tape34xx_disc_data_t *) ti->discdata)->modeset_byte = 0x08;		// IDRC on	cqr = tape_alloc_ccw_req (ti, 2, 0);	if (!cqr) {#ifdef TAPE_DEBUG	        debug_text_exception (tape_debug_area,6,"xcom nomem");#endif /* TAPE_DEBUG */		return NULL;	}	ccw = cqr->cpaddr;	ccw->cmd_code = MODE_SET_DB;	ccw->flags = CCW_FLAG_CC;	ccw->count = 1;	set_normalized_cda (ccw, (unsigned long) (&(((tape34xx_disc_data_t *) ti->discdata)->modeset_byte)));	ccw++;	ccw->cmd_code = NOP;	ccw->flags = 0;	ccw->count = 0;	ccw->cda = (unsigned long) (&(ccw->cmd_code));	s390irq_spin_lock_irqsave (ti->devinfo.irq, lockflags);	ti->kernbuf = NULL;	ti->userbuf = NULL;	tapestate_set (ti, TS_NOP_INIT);	s390irq_spin_unlock_irqrestore (ti->devinfo.irq, lockflags);#ifdef TAPE_DEBUG	debug_text_event (tape_debug_area,6,"xcom ccwg");#endif /* TAPE_DEBUG */	return cqr;}/* * MTSTPART: Move the tape head at the partition with the number 'count'. * Implement the NOP CCW command. */ccw_req_t *tape34xx_mtsetpart (tape_info_t * ti, int count){	long lockflags;	ccw_req_t *cqr;	ccw1_t *ccw;	cqr = tape_alloc_ccw_req (ti, 2, 0);	if (!cqr) {#ifdef TAPE_DEBUG	        debug_text_exception (tape_debug_area,6,"xspa nomem");#endif /* TAPE_DEBUG */	    		return NULL;	}	ccw = cqr->cpaddr;	ccw->cmd_code = MODE_SET_DB;	ccw->flags = CCW_FLAG_CC;	ccw->count = 1;	set_normalized_cda (ccw, (unsigned long) (&(((tape34xx_disc_data_t *) ti->discdata)->modeset_byte)));	ccw++;	ccw->cmd_code = NOP;	ccw->flags = 0;	ccw->count = 0;	ccw->cda = (unsigned long) (&(ccw->cmd_code));	s390irq_spin_lock_irqsave (ti->devinfo.irq, lockflags);	ti->kernbuf = NULL;	ti->userbuf = NULL;	tapestate_set (ti, TS_NOP_INIT);	s390irq_spin_unlock_irqrestore (ti->devinfo.irq, lockflags);#ifdef TAPE_DEBUG	debug_text_event (tape_debug_area,6,"xspa ccwg");#endif /* TAPE_DEBUG */	return cqr;}/* * MTMKPART: .... dummy . * Implement the NOP CCW command. */ccw_req_t *tape34xx_mtmkpart (tape_info_t * ti, int count){	long lockflags;	ccw_req_t *cqr;	ccw1_t *ccw;	cqr = tape_alloc_ccw_req (ti, 2, 0);	if (!cqr) {#ifdef TAPE_DEBUG	        debug_text_exception (tape_debug_area,6,"xnpa nomem");#endif /* TAPE_DEBUG */		return NULL;	}	ccw = cqr->cpaddr;	ccw->cmd_code = MODE_SET_DB;	ccw->flags = CCW_FLAG_CC;	ccw->count = 1;	set_normalized_cda (ccw, (unsigned long) (&(((tape34xx_disc_data_t *) ti->discdata)->modeset_byte)));	ccw++;	ccw->cmd_code = NOP;	ccw->flags = 0;	ccw->count = 0;	ccw->cda = (unsigned long) (&(ccw->cmd_code));	s390irq_spin_lock_irqsave (ti->devinfo.irq, lockflags);	ti->kernbuf = NULL;	ti->userbuf = NULL;	tapestate_set (ti, TS_NOP_INIT);	s390irq_spin_unlock_irqrestore (ti->devinfo.irq, lockflags);#ifdef TAPE_DEBUG	debug_text_event (tape_debug_area,6,"xnpa ccwg");#endif /* TAPE_DEBUG */	return cqr;}/* * MTIOCGET: query the tape drive status. */ccw_req_t *tape34xx_mtiocget (tape_info_t * ti, int count){	return NULL;}/* * MTIOCPOS: query the tape position. */ccw_req_t *tape34xx_mtiocpos (tape_info_t * ti, int count){	return NULL;}ccw_req_t * tape34xx_bread (struct request *req,tape_info_t* ti,int tapeblock_major) {	ccw_req_t *cqr;	ccw1_t *ccw;	__u8 *data;	int s2b = blksize_size[tapeblock_major][ti->blk_minor]/hardsect_size[tapeblock_major][ti->blk_minor];	int realcount;	int size,bhct = 0;	struct buffer_head* bh;	for (bh = req->bh; bh; bh = bh->b_reqnext) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -