OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [drivers/] [s390/] [char/] [tape3490.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
/***************************************************************************
2
 *
3
 *  drivers/s390/char/tape3490.c
4
 *    tape device discipline for 3490E tapes.
5
 *
6
 *  S390 and zSeries version
7
 *    Copyright (C) 2001 IBM Corporation
8
 *    Author(s): Carsten Otte <cotte@de.ibm.com>
9
 *               Tuan Ngo-Anh <ngoanh@de.ibm.com>
10
 *
11
 ****************************************************************************
12
 */
13
 
14
#include "tapedefs.h"
15
#include <linux/version.h>
16
#include <asm/ccwcache.h>       /* CCW allocations      */
17
#include <asm/s390dyn.h>
18
#include <asm/debug.h>
19
#include <linux/compatmac.h>
20
#include "tape.h"
21
#include "tape34xx.h"
22
#include "tape3490.h"
23
 
24
tape_event_handler_t tape3490_event_handler_table[TS_SIZE][TE_SIZE] =
25
{
26
    /* {START , DONE, FAILED, ERROR, OTHER } */
27
        {NULL, tape34xx_unused_done, NULL, NULL, NULL}, /* TS_UNUSED */
28
        {NULL, tape34xx_idle_done, NULL, NULL, NULL},   /* TS_IDLE */
29
        {NULL, NULL, NULL, NULL, NULL},         /* TS_DONE */
30
        {NULL, NULL, NULL, NULL, NULL},         /* TS_FAILED */
31
        {NULL, tape34xx_block_done, NULL, NULL, NULL},          /* TS_BLOCK_INIT */
32
        {NULL, tape34xx_bsb_init_done, NULL, NULL, NULL},       /* TS_BSB_INIT */
33
        {NULL, tape34xx_bsf_init_done, NULL, NULL, NULL},       /* TS_BSF_INIT */
34
        {NULL, tape34xx_dse_init_done, NULL, NULL, NULL},       /* TS_DSE_INIT */
35
        {NULL, NULL, NULL, NULL, NULL},         /* TS_EGA_INIT */
36
        {NULL, tape34xx_fsb_init_done, NULL, NULL, NULL},       /* TS_FSB_INIT */
37
        {NULL, tape34xx_fsf_init_done, NULL, NULL, NULL},       /* TS_FSF_INIT */
38
        {NULL, NULL, NULL, NULL, NULL},         /* TS_LDI_INIT */
39
        {NULL, tape34xx_lbl_init_done, NULL, NULL, NULL},       /* TS_LBL_INIT */
40
        {NULL, NULL, NULL, NULL, NULL},         /* TS_MSE_INIT */
41
        {NULL, tape34xx_nop_init_done, NULL, NULL, NULL},       /* TS_NOP_INIT */
42
        {NULL, tape34xx_rfo_init_done, NULL, NULL, NULL},               /* TS_RBA_INIT */
43
        {NULL, tape34xx_rbi_init_done, NULL, NULL, NULL},       /* TS_RBI_INIT */
44
        {NULL, NULL, NULL, NULL, NULL},         /* TS_RBU_INIT */
45
        {NULL, NULL, NULL, NULL, NULL},         /* TS_RBL_INIT */
46
        {NULL, NULL, NULL, NULL, NULL},         /* TS_RDC_INIT */
47
        {NULL, tape34xx_rfo_init_done, NULL, NULL, NULL},       /* TS_RFO_INIT */
48
        {NULL, NULL, NULL, NULL, NULL},         /* TS_RSD_INIT */
49
        {NULL, tape34xx_rew_init_done, NULL, NULL, NULL},       /* TS_REW_INIT */
50
        {NULL, tape34xx_rew_release_init_done, NULL, NULL, NULL},       /* TS_REW_RELEASE_IMIT */
51
        {NULL, tape34xx_run_init_done, NULL, NULL, NULL},       /* TS_RUN_INIT */
52
        {NULL, NULL, NULL, NULL, NULL},         /* TS_SEN_INIT */
53
        {NULL, NULL, NULL, NULL, NULL},         /* TS_SID_INIT */
54
        {NULL, NULL, NULL, NULL, NULL},         /* TS_SNP_INIT */
55
        {NULL, NULL, NULL, NULL, NULL},         /* TS_SPG_INIT */
56
        {NULL, NULL, NULL, NULL, NULL},         /* TS_SWI_INIT */
57
        {NULL, NULL, NULL, NULL, NULL},         /* TS_SMR_INIT */
58
        {NULL, NULL, NULL, NULL, NULL},         /* TS_SYN_INIT */
59
        {NULL, NULL, NULL, NULL, NULL},         /* TS_TIO_INIT */
60
        {NULL, NULL, NULL, NULL, NULL},         /* TS_UNA_INIT */
61
        {NULL, tape34xx_wri_init_done, NULL, NULL, NULL},       /* TS_WRI_INIT */
62
        {NULL, tape34xx_wtm_init_done, NULL, NULL, NULL},       /* TS_WTM_INIT */
63
        {NULL, NULL, NULL, NULL, NULL}};     /* TS_NOT_OPER */
64
 
65
devreg_t tape3490_devreg = {
66
    ci:
67
    {hc:
68
     {ctype:0x3490}},
69
    flag:DEVREG_MATCH_CU_TYPE | DEVREG_TYPE_DEVCHARS,
70
    oper_func:tape_oper_handler
71
};
72
 
73
void
74
tape3490_setup_assist (tape_info_t * ti)
75
{
76
        tape3490_disc_data_t *data = NULL;
77
#ifdef TAPE_DEBUG
78
    debug_text_event (tape_debug_area,6,"3490 dsetu");
79
    debug_text_event (tape_debug_area,6,"dev:");
80
    debug_int_event (tape_debug_area,6,ti->blk_minor);
81
#endif /* TAPE_DEBUG */
82
        while (data == NULL)
83
                data = kmalloc (sizeof (tape3490_disc_data_t), GFP_KERNEL);
84
        data->modeset_byte = 0x00;
85
        ti->discdata = (void *) data;
86
}
87
 
88
 
89
void
90
tape3490_shutdown (int autoprobe) {
91
    if (autoprobe)
92
        s390_device_unregister(&tape3490_devreg);
93
}
94
 
95
 
96
tape_discipline_t *
97
tape3490_init (int autoprobe)
98
{
99
        tape_discipline_t *disc;
100
#ifdef TAPE_DEBUG
101
    debug_text_event (tape_debug_area,3,"3490 init");
102
#endif /* TAPE_DEBUG */
103
        disc = kmalloc (sizeof (tape_discipline_t), GFP_KERNEL);
104
        if (disc == NULL) {
105
#ifdef TAPE_DEBUG
106
                debug_text_exception (tape_debug_area,3,"disc:nomem");
107
#endif /* TAPE_DEBUG */
108
                return disc;
109
        }
110
        disc->cu_type = 0x3490;
111
        disc->setup_assist = tape3490_setup_assist;
112
        disc->error_recovery = tape34xx_error_recovery;
113
        disc->write_block = tape34xx_write_block;
114
        disc->free_write_block = tape34xx_free_write_block;
115
        disc->read_block = tape34xx_read_block;
116
        disc->free_read_block = tape34xx_free_read_block;
117
        disc->mtfsf = tape34xx_mtfsf;
118
        disc->mtbsf = tape34xx_mtbsf;
119
        disc->mtfsr = tape34xx_mtfsr;
120
        disc->mtbsr = tape34xx_mtbsr;
121
        disc->mtweof = tape34xx_mtweof;
122
        disc->mtrew = tape34xx_mtrew;
123
        disc->mtoffl = tape34xx_mtoffl;
124
        disc->mtnop = tape34xx_mtnop;
125
        disc->mtbsfm = tape34xx_mtbsfm;
126
        disc->mtfsfm = tape34xx_mtfsfm;
127
        disc->mteom = tape34xx_mteom;
128
        disc->mterase = tape34xx_mterase;
129
        disc->mtsetdensity = tape34xx_mtsetdensity;
130
        disc->mtseek = tape34xx_mtseek;
131
        disc->mttell = tape34xx_mttell;
132
        disc->mtsetdrvbuffer = tape34xx_mtsetdrvbuffer;
133
        disc->mtlock = tape34xx_mtlock;
134
        disc->mtunlock = tape34xx_mtunlock;
135
        disc->mtload = tape34xx_mtload;
136
        disc->mtunload = tape34xx_mtunload;
137
        disc->mtcompression = tape34xx_mtcompression;
138
        disc->mtsetpart = tape34xx_mtsetpart;
139
        disc->mtmkpart = tape34xx_mtmkpart;
140
        disc->mtiocget = tape34xx_mtiocget;
141
        disc->mtiocpos = tape34xx_mtiocpos;
142
        disc->shutdown = tape3490_shutdown;
143
        disc->discipline_ioctl_overload = tape34xx_ioctl_overload;
144
        disc->event_table = &tape3490_event_handler_table;
145
        disc->default_handler = tape34xx_default_handler;
146
        disc->bread = tape34xx_bread;
147
        disc->free_bread = tape34xx_free_bread;
148
        disc->tape = NULL;      /* pointer for backreference */
149
        disc->next = NULL;
150
        if (autoprobe)
151
            s390_device_register(&tape3490_devreg);
152
#ifdef TAPE_DEBUG
153
        debug_text_event (tape_debug_area,3,"3490 regis");
154
#endif /* TAPE_DEBUG */
155
        return disc;
156
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.