Main Page | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals

s390io.c File Reference

#include <linux/module.h>
#include <linux/errno.h>
#include <linux/kernel_stat.h>
#include <linux/signal.h>
#include <linux/sched.h>
#include <linux/interrupt.h>
#include <linux/malloc.h>
#include <linux/string.h>
#include <linux/smp.h>
#include <linux/tasks.h>
#include <linux/smp_lock.h>
#include <linux/init.h>
#include <asm/system.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <asm/bitops.h>
#include <asm/smp.h>
#include <asm/pgtable.h>
#include <asm/delay.h>
#include <asm/processor.h>
#include <asm/lowcore.h>
#include <asm/s390io.h>
#include <asm/s390dyn.h>
#include <asm/s390mach.h>

Include dependency graph for s390io.c:

Go to the source code of this file.

Defines

#define CONFIG_DEBUG_CRW
#define REIPL_DEVID_MAGIC   0x87654321
#define PGMCHK_OPERAND_EXC   0x15

Functions

int do_none (unsigned int irq, int cpu, struct pt_regs *regs)
int enable_none (unsigned int irq)
int disable_none (unsigned int irq)
static void init_IRQ_handler (int irq, void *dev_id, struct pt_regs *regs)
static int s390_setup_irq (unsigned int irq, struct s390_irqaction *new)
static void s390_process_subchannels (void)
static void s390_device_recognition_all (void)
static void s390_device_recognition_irq (int irq)
static int s390_validate_subchannel (int irq, int enable)
static int s390_SenseID (int irq, senseid_t *sid, __u8 lpm)
static int s390_SetPGID (int irq, __u8 lpm, pgid_t *pgid)
static int s390_SensePGID (int irq, __u8 lpm, pgid_t *pgid)
static int s390_process_IRQ (unsigned int irq)
static int disable_subchannel (unsigned int irq)
int s390_DevicePathVerification (int irq, __u8 domask)
void tod_wait (unsigned long usecs)
asmlinkage void do_IRQ (struct pt_regs regs, unsigned int irq, __u32 s390_intparm)
static void * alloc_bootmem (unsigned long size)
static int free_bootmem (unsigned long buffer, unsigned long size)
void s390_displayhex (char *str, void *ptr, s32 cnt)
int s390_request_irq_special (int irq, io_handler_func_t io_handler, not_oper_handler_func_t not_oper_handler, unsigned long irqflags, const char *devname, devstat_t *dev_id)
int s390_request_irq (unsigned int irq, void(*handler)(int, void *, struct pt_regs *), unsigned long irqflags, const char *devname, void *dev_id)
void s390_free_irq (unsigned int irq, void *dev_id)
int disable_irq (unsigned int irq)
int enable_irq (unsigned int irq)
static int enable_subchannel (unsigned int irq)
unsigned long s390_init_IRQ (unsigned long memstart)
int s390_start_IO (int irq, ccw1_t *cpa, unsigned long user_intparm, __u8 lpm, unsigned long flag)
int do_IO (int irq, ccw1_t *cpa, unsigned long user_intparm, __u8 lpm, unsigned long flag)
int resume_IO (int irq)
int halt_IO (int irq, unsigned long user_intparm, unsigned long flag)
int clear_IO (int irq, unsigned long user_intparm, unsigned long flag)
int set_cons_dev (int irq)
int reset_cons_dev (int irq)
int wait_cons_dev (int irq)
int enable_cpu_sync_isc (int irq)
int disable_cpu_sync_isc (int irq)
void VM_virtual_device_info (unsigned int devno, senseid_t *ps)
int read_dev_chars (int irq, void **buffer, int length)
int read_conf_data (int irq, void **buffer, int *length, __u8 lpm)
int get_dev_info (int irq, dev_info_t *pdi)
static int __inline__ get_next_available_irq (ioinfo_t *pi)
int get_irq_first (void)
int get_irq_next (int irq)
int get_dev_info_by_irq (int irq, dev_info_t *pdi)
int get_dev_info_by_devno (unsigned int devno, dev_info_t *pdi)
int get_irq_by_devno (unsigned int devno)
unsigned int get_devno_by_irq (int irq)
static int __inline__ s390_SetMultiPath (int irq)
void s390_do_crw_pending (crwe_t *pcrwe)
void do_reipl (int)
void reipl (int sch)
 EXPORT_SYMBOL (halt_IO)
 EXPORT_SYMBOL (clear_IO)
 EXPORT_SYMBOL (do_IO)
 EXPORT_SYMBOL (resume_IO)
 EXPORT_SYMBOL (ioinfo)
 EXPORT_SYMBOL (get_dev_info_by_irq)
 EXPORT_SYMBOL (get_dev_info_by_devno)
 EXPORT_SYMBOL (get_irq_by_devno)
 EXPORT_SYMBOL (get_devno_by_irq)
 EXPORT_SYMBOL (get_irq_first)
 EXPORT_SYMBOL (get_irq_next)
 EXPORT_SYMBOL (read_conf_data)
 EXPORT_SYMBOL (read_dev_chars)
 EXPORT_SYMBOL (s390_request_irq_special)

Variables

s390_irqaction init_IRQ_action
unsigned int highest_subchannel
ioinfo_tioinfo_head = NULL
ioinfo_tioinfo_tail = NULL
ioinfo_tioinfo [__MAX_SUBCHANNELS]
static spinlock_t sync_isc = SPIN_LOCK_UNLOCKED
static psw_t io_sync_wait
static int cons_dev = -1
static int init_IRQ_complete = 0
static schib_t init_schib
static irb_t init_irb
static __u64 irq_IPL_TOD
hw_interrupt_type no_irq_type
static unsigned long memory_start = 0


Define Documentation

#define CONFIG_DEBUG_CRW
 

Definition at line 41 of file s390io.c.

#define PGMCHK_OPERAND_EXC   0x15
 

Referenced by s390_validate_subchannel().

#define REIPL_DEVID_MAGIC   0x87654321
 

Definition at line 43 of file s390io.c.

Referenced by reipl(), and s390_free_irq().


Function Documentation

static void * alloc_bootmem unsigned long  size  )  [static]
 

Definition at line 684 of file s390io.c.

References memory_start, and ret.

Referenced by read_conf_data(), and s390_validate_subchannel().

int clear_IO int  irq,
unsigned long  user_intparm,
unsigned long  flag
 

Definition at line 1659 of file s390io.c.

References __LC_IO_INT_PARM, __LC_SUBCHANNEL_NR, __LC_SYNC_IO_WORD, _IO_PSW_MASK, _PSW_ACC_REG_MODE, _PSW_HOME_SPACE_MODE, _PSW_IO_WAIT, _PSW_PRIM_SPACE_MODE, _PSW_SEC_SPACE_MODE, irqdesc::action, psw_t::addr, devstat_t::cstat, irqaction::dev_id, _ioinfo::devstat, DEVSTAT_CLEAR_FUNCTION, DEVSTAT_FINAL_STATUS, DEVSTAT_NOT_OPER, DEVSTAT_STATUS_PENDING, disable_cpu_sync_isc(), devstat_t::dstat, EBUSY, EIO, enable_cpu_sync_isc(), ENODEV, FIX_PSW, devstat_t::flag, _ioinfo::flags, highest_subchannel, _lowcore::io_new_psw, irq_desc, devstat_t::lpum, psw_t::mask, memcpy, memset, NULL, panic(), ret, s390_process_IRQ(), devstat_t::scnt, spin_lock_irqsave, spin_unlock_irqrestore, _ioinfo::u_intparm, and _ioinfo::ui.

Referenced by s390_free_irq().

Here is the call graph for this function:

int disable_cpu_sync_isc int  irq  ) 
 

Definition at line 2985 of file s390io.c.

References EBUSY, EINVAL, EIO, ENODEV, highest_subchannel, rc, retry, s390_process_IRQ(), _ioinfo::schib, and _ioinfo::ui.

Referenced by clear_IO(), halt_IO(), s390_device_recognition_irq(), and s390_start_IO().

Here is the call graph for this function:

int disable_irq unsigned int  irq  ) 
 

Definition at line 370 of file s390io.c.

References hw_interrupt_type::disable, ENODEV, irq_desc_t::handler, _ioinfo::irq_desc, IRQ_DISABLED, ret, irq_desc_t::status, and synchronize_irq.

int disable_none unsigned int  irq  ) 
 

Definition at line 67 of file s390io.c.

References ENODEV.

static int disable_subchannel unsigned int  irq  )  [static]
 

Definition at line 523 of file s390io.c.

References _ioinfo::devno, EBUSY, EIO, ENODEV, _ioinfo::flags, highest_subchannel, KERN_CRIT, printk, ret, retry, s390_process_IRQ(), _ioinfo::schib, and _ioinfo::ui.

Referenced by s390_free_irq(), and s390_setup_irq().

Here is the call graph for this function:

int do_IO int  irq,
ccw1_t cpa,
unsigned long  user_intparm,
__u8  lpm,
unsigned long  flag
 

Definition at line 1238 of file s390io.c.

References EBUSY, ENODEV, _ioinfo::flags, highest_subchannel, _ioinfo::qcpa, _ioinfo::qflag, _ioinfo::qintparm, _ioinfo::qlpm, ret, s390_start_IO(), and _ioinfo::ui.

Referenced by ctc_irq_bh(), ctc_irq_handler(), ctc_read_retry(), ctc_tx(), ctc_write_retry(), dasd_start_IO(), lcs_doio_func(), raw3215_start_io(), tape34xx_error_recovery_do_retry(), tape_ioctl(), tape_mtioctop(), tape_read(), tape_release(), tape_write(), tapeblock_exec_IO(), and tapeblock_mediumdetect().

Here is the call graph for this function:

asmlinkage void do_IRQ struct pt_regs  regs,
unsigned int  irq,
__u32  s390_intparm
 

int do_none unsigned int  irq,
int  cpu,
struct pt_regs regs
 

Definition at line 65 of file s390io.c.

void do_reipl int   ) 
 

int enable_cpu_sync_isc int  irq  ) 
 

Definition at line 2907 of file s390io.c.

References count, EBUSY, EINVAL, EIO, ENODEV, highest_subchannel, rc, s390_process_IRQ(), _ioinfo::schib, and _ioinfo::ui.

Referenced by clear_IO(), halt_IO(), s390_device_recognition_irq(), and s390_start_IO().

Here is the call graph for this function:

int enable_irq unsigned int  irq  ) 
 

Definition at line 393 of file s390io.c.

References hw_interrupt_type::enable, ENODEV, irq_desc_t::handler, _ioinfo::irq_desc, ret, and irq_desc_t::status.

int enable_none unsigned int  irq  ) 
 

Definition at line 66 of file s390io.c.

References ENODEV.

static int enable_subchannel unsigned int  irq  )  [static]
 

Definition at line 414 of file s390io.c.

References cons_dev, _ioinfo::devno, EBUSY, EIO, ENODEV, _ioinfo::flags, highest_subchannel, KERN_CRIT, printk, ret, retry, s390_process_IRQ(), _ioinfo::schib, tod_wait(), and _ioinfo::ui.

Referenced by s390_setup_irq().

Here is the call graph for this function:

EXPORT_SYMBOL s390_request_irq_special   ) 
 

EXPORT_SYMBOL read_dev_chars   ) 
 

EXPORT_SYMBOL read_conf_data   ) 
 

EXPORT_SYMBOL get_irq_next   ) 
 

EXPORT_SYMBOL get_irq_first   ) 
 

EXPORT_SYMBOL get_devno_by_irq   ) 
 

EXPORT_SYMBOL get_irq_by_devno   ) 
 

EXPORT_SYMBOL get_dev_info_by_devno   ) 
 

EXPORT_SYMBOL get_dev_info_by_irq   ) 
 

EXPORT_SYMBOL ioinfo   ) 
 

EXPORT_SYMBOL resume_IO   ) 
 

EXPORT_SYMBOL do_IO   ) 
 

EXPORT_SYMBOL clear_IO   ) 
 

EXPORT_SYMBOL halt_IO   ) 
 

int free_bootmem unsigned long  buffer,
unsigned long  size
[static]
 

Definition at line 693 of file s390io.c.

References EINVAL, memory_start, and ret.

Referenced by read_conf_data(), and s390_device_recognition_irq().

int get_dev_info int  irq,
dev_info_t *  pdi
 

Definition at line 3691 of file s390io.c.

References get_dev_info_by_irq().

Referenced by raw3215_find_dev().

Here is the call graph for this function:

int get_dev_info_by_devno unsigned int  devno,
dev_info_t *  pdi
 

Definition at line 3847 of file s390io.c.

References DEVSTAT_DEVICE_OWNED, DEVSTAT_NOT_OPER, DEVSTAT_UNKNOWN_DEV, EINVAL, ENODEV, _ioinfo::flags, highest_subchannel, i, memcpy, memset, NULL, rc, _ioinfo::senseid, and _ioinfo::ui.

Referenced by lcs_probe().

int get_dev_info_by_irq int  irq,
dev_info_t *  pdi
 

Definition at line 3791 of file s390io.c.

References DEVSTAT_DEVICE_OWNED, DEVSTAT_NOT_OPER, DEVSTAT_UNKNOWN_DEV, EINVAL, ENODEV, _ioinfo::flags, highest_subchannel, memcpy, memset, NULL, _ioinfo::schib, _ioinfo::senseid, and _ioinfo::ui.

Referenced by channel_scan(), dasd_set_device_level(), get_dev_info(), lcs_probe(), tape_init(), tape_oper_handler(), tape_parm_parse(), and tape_setup().

unsigned int get_devno_by_irq int  irq  ) 
 

Definition at line 3945 of file s390io.c.

References highest_subchannel, and _ioinfo::schib.

Referenced by dasd_init(), dasd_oper_handler(), and dasd_set_device_level().

int get_irq_by_devno unsigned int  devno  ) 
 

Definition at line 3920 of file s390io.c.

References highest_subchannel, i, rc, and _ioinfo::schib.

Referenced by __initfunc(), cleanup_dasd(), ctc_probe(), and dasd_init().

int get_irq_first void   ) 
 

Definition at line 3728 of file s390io.c.

References ENODEV, get_next_available_irq(), _ioinfo::irq, _ioinfo::next, and _ioinfo::ui.

Referenced by dasd_init(), lcs_probe(), raw3215_find_dev(), tape_init(), and tape_parm_parse().

Here is the call graph for this function:

int get_irq_next int  irq  ) 
 

Definition at line 3758 of file s390io.c.

References EINVAL, ENODEV, get_next_available_irq(), _ioinfo::irq, _ioinfo::next, and next.

Referenced by dasd_init(), lcs_probe(), raw3215_find_dev(), tape_init(), and tape_parm_parse().

Here is the call graph for this function:

static int __inline__ get_next_available_irq ioinfo_t pi  )  [static]
 

Definition at line 3696 of file s390io.c.

References ENODEV, _ioinfo::irq, _ioinfo::next, NULL, TRUE, and _ioinfo::ui.

Referenced by get_irq_first(), and get_irq_next().

int halt_IO int  irq,
unsigned long  user_intparm,
unsigned long  flag
 

Definition at line 1375 of file s390io.c.

References __LC_IO_INT_PARM, __LC_SUBCHANNEL_NR, __LC_SYNC_IO_WORD, _IO_PSW_MASK, _PSW_ACC_REG_MODE, _PSW_HOME_SPACE_MODE, _PSW_IO_WAIT, _PSW_PRIM_SPACE_MODE, _PSW_SEC_SPACE_MODE, irqdesc::action, psw_t::addr, devstat_t::cstat, irqaction::dev_id, _ioinfo::devstat, DEVSTAT_FINAL_STATUS, DEVSTAT_HALT_FUNCTION, DEVSTAT_NOT_OPER, DEVSTAT_STATUS_PENDING, disable_cpu_sync_isc(), devstat_t::dstat, EBUSY, EIO, enable_cpu_sync_isc(), ENODEV, FIX_PSW, devstat_t::flag, _ioinfo::flags, highest_subchannel, _lowcore::io_new_psw, irq_desc, devstat_t::lpum, psw_t::mask, memcpy, memset, NULL, panic(), ret, s390_process_IRQ(), devstat_t::scnt, spin_lock_irqsave, spin_unlock_irqrestore, _ioinfo::u_intparm, and _ioinfo::ui.

Referenced by ctc_open(), ctc_release(), dasd_do_chanq(), lcs_hsch_func(), s390_free_irq(), and s390_start_IO().

Here is the call graph for this function:

void init_IRQ_handler int  irq,
void *  dev_id,
struct pt_regs regs
[static]
 

Definition at line 762 of file s390io.c.

Referenced by read_conf_data(), read_dev_chars(), s390_device_recognition_irq(), s390_SenseID(), s390_SensePGID(), and s390_SetPGID().

int read_conf_data int  irq,
void **  buffer,
int *  length,
__u8  lpm
 

Definition at line 3478 of file s390io.c.

References __cli, __restore_flags, __save_flags, irq_desc_t::action, alloc_bootmem(), ccw1_t, CCW_FLAG_SLI, irqaction::dev_id, DEVSTAT_FLAG_SENSE_AVAIL, DEVSTAT_NOT_OPER, DEVSTAT_STATUS_PENDING, EINVAL, EIO, ENODEV, ENOMEM, EOPNOTSUPP, devstat_t::flag, _ioinfo::flags, found, free_bootmem(), free_irq(), highest_subchannel, init_IRQ_complete, init_IRQ_handler(), _ioinfo::irq_desc, kfree(), kmalloc(), memset, NULL, request_irq(), ret, retry, s390_start_IO(), _ioinfo::senseccw, _ioinfo::senseid, and virt_to_phys.

Referenced by dasd_eckd_check_characteristics(), and s390_device_recognition_irq().

Here is the call graph for this function:

int read_dev_chars int  irq,
void **  buffer,
int  length
 

Definition at line 3343 of file s390io.c.

References __cli, __restore_flags, __save_flags, irq_desc_t::action, irqdesc::action, ccw1_t, CCW_CMD_RDC, CCW_FLAG_SLI, irqaction::dev_id, DEVSTAT_STATUS_PENDING, EBUSY, EINVAL, ENODEV, ENOMEM, _ioinfo::flags, free_irq(), highest_subchannel, init_IRQ_handler(), _ioinfo::irq_desc, irq_desc, kmalloc(), memset, request_irq(), ret, retry, s390_start_IO(), _ioinfo::senseccw, and virt_to_phys.

Referenced by dasd_eckd_check_characteristics(), and dasd_fba_check_characteristics().

Here is the call graph for this function:

void reipl int  sch  ) 
 

Definition at line 5580 of file s390io.c.

References do_reipl, free_irq(), highest_subchannel, i, REIPL_DEVID_MAGIC, and x10000.

Referenced by do_machine_restart(), and machine_restart().

Here is the call graph for this function:

int reset_cons_dev int  irq  ) 
 

Definition at line 2788 of file s390io.c.

References cons_dev, _ioinfo::devstat, DEVSTAT_NOT_OPER, EBUSY, EIO, ENODEV, devstat_t::flag, highest_subchannel, rc, and _ioinfo::schib.

int resume_IO int  irq  ) 
 

Definition at line 1310 of file s390io.c.

References EBUSY, EINVAL, ENODEV, ENOTCONN, _ioinfo::flags, highest_subchannel, ret, s390_process_IRQ(), and _ioinfo::ui.

Referenced by lcs_interrupt_resume_read(), and lcs_resume_write().

Here is the call graph for this function:

void s390_device_recognition_all void   )  [static]
 

Definition at line 4081 of file s390io.c.

References highest_subchannel, and s390_device_recognition_irq().

Referenced by s390_init_IRQ().

Here is the call graph for this function:

void s390_device_recognition_irq int  irq  )  [static]
 

Definition at line 3976 of file s390io.c.

References disable_cpu_sync_isc(), enable_cpu_sync_isc(), free_bootmem(), free_irq(), init_IRQ_complete, init_IRQ_handler(), kfree(), memset, read_conf_data(), request_irq(), ret, s390_displayhex(), s390_SenseID(), spin_lock_irqsave, spin_unlock_irqrestore, sprintf(), _ioinfo::ui, x80, and xff.

Referenced by s390_device_recognition_all(), and s390_do_crw_pending().

Here is the call graph for this function:

int s390_DevicePathVerification int  irq,
__u8  domask
 

Definition at line 4839 of file s390io.c.

References __LC_CPUADDR, __LC_CPUID, ENODEV, EOPNOTSUPP, first, _ioinfo::flags, i, irq_IPL_TOD, memcpy, _ioinfo::opm, _ioinfo::pgid, printk, ret, s390_SensePGID(), s390_SetPGID(), _ioinfo::schib, _ioinfo::ui, and x80.

Referenced by s390_request_irq_special().

Here is the call graph for this function:

void s390_displayhex char *  str,
void *  ptr,
s32  cnt
 

Definition at line 108 of file s390io.c.

References printk, s32, and u32.

Referenced by s390_device_recognition_irq(), s390_process_IRQ(), and s390_start_IO().

void s390_do_crw_pending crwe_t pcrwe  ) 
 

Definition at line 5390 of file s390io.c.

References irqdesc::action, _crwe::crw, CRW_RSC_CONFIG, CRW_RSC_CPATH, CRW_RSC_CSS, CRW_RSC_MONITOR, CRW_RSC_SCH, _crwe::crwe_next, irqaction::dev_id, _ioinfo::devno, DEVSTAT_DEVICE_GONE, DEVSTAT_REVALIDATE, _ioinfo::flags, free_irq(), highest_subchannel, irq_desc, lock, _ioinfo::nopfunc, NULL, _devreg::oper_func, printk, _crw::rsc, _crw::rsid, s390_device_recognition_irq(), s390_search_devreg(), s390_validate_subchannel(), and _ioinfo::ui.

Referenced by s390_machine_check_handler().

Here is the call graph for this function:

void s390_free_irq unsigned int  irq,
void *  dev_id
 

Definition at line 226 of file s390io.c.

References irq_desc_t::action, irqdesc::action,