Lines Matching refs:io

6 static unsigned char intf_mem_inb(const struct si_sm_io *io,  in intf_mem_inb()  argument
9 return readb((io->addr)+(offset * io->regspacing)); in intf_mem_inb()
12 static void intf_mem_outb(const struct si_sm_io *io, unsigned int offset, in intf_mem_outb() argument
15 writeb(b, (io->addr)+(offset * io->regspacing)); in intf_mem_outb()
18 static unsigned char intf_mem_inw(const struct si_sm_io *io, in intf_mem_inw() argument
21 return (readw((io->addr)+(offset * io->regspacing)) >> io->regshift) in intf_mem_inw()
25 static void intf_mem_outw(const struct si_sm_io *io, unsigned int offset, in intf_mem_outw() argument
28 writeb(b << io->regshift, (io->addr)+(offset * io->regspacing)); in intf_mem_outw()
31 static unsigned char intf_mem_inl(const struct si_sm_io *io, in intf_mem_inl() argument
34 return (readl((io->addr)+(offset * io->regspacing)) >> io->regshift) in intf_mem_inl()
38 static void intf_mem_outl(const struct si_sm_io *io, unsigned int offset, in intf_mem_outl() argument
41 writel(b << io->regshift, (io->addr)+(offset * io->regspacing)); in intf_mem_outl()
45 static unsigned char mem_inq(const struct si_sm_io *io, unsigned int offset) in mem_inq() argument
47 return (readq((io->addr)+(offset * io->regspacing)) >> io->regshift) in mem_inq()
51 static void mem_outq(const struct si_sm_io *io, unsigned int offset, in mem_outq() argument
54 writeq((u64)b << io->regshift, (io->addr)+(offset * io->regspacing)); in mem_outq()
58 static void mem_region_cleanup(struct si_sm_io *io, int num) in mem_region_cleanup() argument
60 unsigned long addr = io->addr_data; in mem_region_cleanup()
64 release_mem_region(addr + idx * io->regspacing, in mem_region_cleanup()
65 io->regsize); in mem_region_cleanup()
68 static void mem_cleanup(struct si_sm_io *io) in mem_cleanup() argument
70 if (io->addr) { in mem_cleanup()
71 iounmap(io->addr); in mem_cleanup()
72 mem_region_cleanup(io, io->io_size); in mem_cleanup()
76 int ipmi_si_mem_setup(struct si_sm_io *io) in ipmi_si_mem_setup() argument
78 unsigned long addr = io->addr_data; in ipmi_si_mem_setup()
88 switch (io->regsize) { in ipmi_si_mem_setup()
90 io->inputb = intf_mem_inb; in ipmi_si_mem_setup()
91 io->outputb = intf_mem_outb; in ipmi_si_mem_setup()
94 io->inputb = intf_mem_inw; in ipmi_si_mem_setup()
95 io->outputb = intf_mem_outw; in ipmi_si_mem_setup()
98 io->inputb = intf_mem_inl; in ipmi_si_mem_setup()
99 io->outputb = intf_mem_outl; in ipmi_si_mem_setup()
103 io->inputb = mem_inq; in ipmi_si_mem_setup()
104 io->outputb = mem_outq; in ipmi_si_mem_setup()
108 dev_warn(io->dev, "Invalid register size: %d\n", in ipmi_si_mem_setup()
109 io->regsize); in ipmi_si_mem_setup()
119 for (idx = 0; idx < io->io_size; idx++) { in ipmi_si_mem_setup()
120 if (request_mem_region(addr + idx * io->regspacing, in ipmi_si_mem_setup()
121 io->regsize, SI_DEVICE_NAME) == NULL) { in ipmi_si_mem_setup()
123 mem_region_cleanup(io, idx); in ipmi_si_mem_setup()
135 mapsize = ((io->io_size * io->regspacing) in ipmi_si_mem_setup()
136 - (io->regspacing - io->regsize)); in ipmi_si_mem_setup()
137 io->addr = ioremap(addr, mapsize); in ipmi_si_mem_setup()
138 if (io->addr == NULL) { in ipmi_si_mem_setup()
139 mem_region_cleanup(io, io->io_size); in ipmi_si_mem_setup()
143 io->io_cleanup = mem_cleanup; in ipmi_si_mem_setup()