Lines Matching +full:8 +full:- +full:port
1 // SPDX-License-Identifier: GPL-2.0
12 /* Out-of-line versions of the i/o routines that redirect into the
13 platform-specific version. Note that "platform-specific" may mean
86 u8 inb(unsigned long port) in inb() argument
88 return ioread8(ioport_map(port, 1)); in inb()
91 u16 inw(unsigned long port) in inw() argument
93 return ioread16(ioport_map(port, 2)); in inw()
96 u32 inl(unsigned long port) in inl() argument
98 return ioread32(ioport_map(port, 4)); in inl()
101 void outb(u8 b, unsigned long port) in outb() argument
103 iowrite8(b, ioport_map(port, 1)); in outb()
106 void outw(u16 b, unsigned long port) in outw() argument
108 iowrite16(b, ioport_map(port, 2)); in outw()
111 void outl(u32 b, unsigned long port) in outl() argument
113 iowrite32(b, ioport_map(port, 4)); in outl()
275 * Read COUNT 8-bit bytes from port PORT into memory starting at SRC.
277 void ioread8_rep(const void __iomem *port, void *dst, unsigned long count) in ioread8_rep() argument
282 count--; in ioread8_rep()
283 *(unsigned char *)dst = ioread8(port); in ioread8_rep()
289 count -= 4; in ioread8_rep()
290 w = ioread8(port); in ioread8_rep()
291 w |= ioread8(port) << 8; in ioread8_rep()
292 w |= ioread8(port) << 16; in ioread8_rep()
293 w |= ioread8(port) << 24; in ioread8_rep()
299 --count; in ioread8_rep()
300 *(unsigned char *)dst = ioread8(port); in ioread8_rep()
305 void insb(unsigned long port, void *dst, unsigned long count) in insb() argument
307 ioread8_rep(ioport_map(port, 1), dst, count); in insb()
314 * Read COUNT 16-bit words from port PORT into memory starting at
320 void ioread16_rep(const void __iomem *port, void *dst, unsigned long count) in ioread16_rep() argument
326 count--; in ioread16_rep()
327 *(unsigned short *)dst = ioread16(port); in ioread16_rep()
333 count -= 2; in ioread16_rep()
334 w = ioread16(port); in ioread16_rep()
335 w |= ioread16(port) << 16; in ioread16_rep()
341 *(unsigned short*)dst = ioread16(port); in ioread16_rep()
345 void insw(unsigned long port, void *dst, unsigned long count) in insw() argument
347 ioread16_rep(ioport_map(port, 2), dst, count); in insw()
355 * Read COUNT 32-bit words from port PORT into memory starting at
360 void ioread32_rep(const void __iomem *port, void *dst, unsigned long count) in ioread32_rep() argument
363 while (count--) { in ioread32_rep()
365 ((struct S *)dst)->x = ioread32(port); in ioread32_rep()
369 /* Buffer 32-bit aligned. */ in ioread32_rep()
370 while (count--) { in ioread32_rep()
371 *(unsigned int *)dst = ioread32(port); in ioread32_rep()
377 void insl(unsigned long port, void *dst, unsigned long count) in insl() argument
379 ioread32_rep(ioport_map(port, 4), dst, count); in insl()
390 * doing byte writes the slow way (no r-m-w cycle).
392 void iowrite8_rep(void __iomem *port, const void *xsrc, unsigned long count) in iowrite8_rep() argument
395 while (count--) in iowrite8_rep()
396 iowrite8(*src++, port); in iowrite8_rep()
399 void outsb(unsigned long port, const void *src, unsigned long count) in outsb() argument
401 iowrite8_rep(ioport_map(port, 1), src, count); in outsb()
414 void iowrite16_rep(void __iomem *port, const void *src, unsigned long count) in iowrite16_rep() argument
420 iowrite16(*(unsigned short *)src, port); in iowrite16_rep()
422 --count; in iowrite16_rep()
427 count -= 2; in iowrite16_rep()
430 iowrite16(w >> 0, port); in iowrite16_rep()
431 iowrite16(w >> 16, port); in iowrite16_rep()
435 iowrite16(*(unsigned short *)src, port); in iowrite16_rep()
439 void outsw(unsigned long port, const void *src, unsigned long count) in outsw() argument
441 iowrite16_rep(ioport_map(port, 2), src, count); in outsw()
454 void iowrite32_rep(void __iomem *port, const void *src, unsigned long count) in iowrite32_rep() argument
457 while (count--) { in iowrite32_rep()
459 iowrite32(((struct S *)src)->x, port); in iowrite32_rep()
463 /* Buffer 32-bit aligned. */ in iowrite32_rep()
464 while (count--) { in iowrite32_rep()
465 iowrite32(*(unsigned int *)src, port); in iowrite32_rep()
471 void outsl(unsigned long port, const void *src, unsigned long count) in outsl() argument
473 iowrite32_rep(ioport_map(port, 4), src, count); in outsl()
486 /* Optimize co-aligned transfers. Everything else gets handled in memcpy_fromio()
489 if (count >= 8 && ((u64)to & 7) == ((u64)from & 7)) { in memcpy_fromio()
490 count -= 8; in memcpy_fromio()
493 count -= 8; in memcpy_fromio()
494 to += 8; in memcpy_fromio()
495 from += 8; in memcpy_fromio()
497 count += 8; in memcpy_fromio()
501 count -= 4; in memcpy_fromio()
504 count -= 4; in memcpy_fromio()
512 count -= 2; in memcpy_fromio()
515 count -= 2; in memcpy_fromio()
524 count--; in memcpy_fromio()
540 /* Optimize co-aligned transfers. Everything else gets handled in memcpy_toio()
542 /* FIXME -- align FROM. */ in memcpy_toio()
544 if (count >= 8 && ((u64)to & 7) == ((u64)from & 7)) { in memcpy_toio()
545 count -= 8; in memcpy_toio()
548 count -= 8; in memcpy_toio()
549 to += 8; in memcpy_toio()
550 from += 8; in memcpy_toio()
552 count += 8; in memcpy_toio()
556 count -= 4; in memcpy_toio()
559 count -= 4; in memcpy_toio()
567 count -= 2; in memcpy_toio()
570 count -= 2; in memcpy_toio()
579 count--; in memcpy_toio()
598 count--; in _memset_c_io()
605 count -= 2; in _memset_c_io()
612 count -= 4; in _memset_c_io()
615 /* Handle all full-sized quadwords: we're aligned in _memset_c_io()
617 count -= 8; in _memset_c_io()
621 to += 8; in _memset_c_io()
622 count -= 8; in _memset_c_io()
625 count += 8; in _memset_c_io()
627 /* The tail is word-aligned if we still have count >= 4 */ in _memset_c_io()
631 count -= 4; in _memset_c_io()
634 /* The tail is half-word aligned if we have count >= 2 */ in _memset_c_io()
638 count -= 2; in _memset_c_io()
671 while (count--) { in scr_memcpyw()
696 while (count--) in scr_memmovew()
697 scr_writew(scr_readw(--s), --d); in scr_memmovew()
703 void __iomem *ioport_map(unsigned long port, unsigned int size) in ioport_map() argument
705 return IO_CONCAT(__IO_PREFIX,ioportmap) (port); in ioport_map()