home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-sparc64 / xor.h < prev   
Encoding:
C/C++ Source or Header  |  2006-08-11  |  2.3 KB  |  67 lines

  1. /*
  2.  * include/asm-sparc64/xor.h
  3.  *
  4.  * High speed xor_block operation for RAID4/5 utilizing the
  5.  * UltraSparc Visual Instruction Set and Niagara block-init
  6.  * twin-load instructions.
  7.  *
  8.  * Copyright (C) 1997, 1999 Jakub Jelinek (jj@ultra.linux.cz)
  9.  * Copyright (C) 2006 David S. Miller <davem@davemloft.net>
  10.  *
  11.  * This program is free software; you can redistribute it and/or modify
  12.  * it under the terms of the GNU General Public License as published by
  13.  * the Free Software Foundation; either version 2, or (at your option)
  14.  * any later version.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * (for example /usr/src/linux/COPYING); if not, write to the Free
  18.  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  19.  */
  20.  
  21. #include <asm/spitfire.h>
  22.  
  23. extern void xor_vis_2(unsigned long, unsigned long *, unsigned long *);
  24. extern void xor_vis_3(unsigned long, unsigned long *, unsigned long *,
  25.               unsigned long *);
  26. extern void xor_vis_4(unsigned long, unsigned long *, unsigned long *,
  27.               unsigned long *, unsigned long *);
  28. extern void xor_vis_5(unsigned long, unsigned long *, unsigned long *,
  29.               unsigned long *, unsigned long *, unsigned long *);
  30.  
  31. /* XXX Ugh, write cheetah versions... -DaveM */
  32.  
  33. static struct xor_block_template xor_block_VIS = {
  34.         .name    = "VIS",
  35.         .do_2    = xor_vis_2,
  36.         .do_3    = xor_vis_3,
  37.         .do_4    = xor_vis_4,
  38.         .do_5    = xor_vis_5,
  39. };
  40.  
  41. extern void xor_niagara_2(unsigned long, unsigned long *, unsigned long *);
  42. extern void xor_niagara_3(unsigned long, unsigned long *, unsigned long *,
  43.               unsigned long *);
  44. extern void xor_niagara_4(unsigned long, unsigned long *, unsigned long *,
  45.               unsigned long *, unsigned long *);
  46. extern void xor_niagara_5(unsigned long, unsigned long *, unsigned long *,
  47.               unsigned long *, unsigned long *, unsigned long *);
  48.  
  49. static struct xor_block_template xor_block_niagara = {
  50.         .name    = "Niagara",
  51.         .do_2    = xor_niagara_2,
  52.         .do_3    = xor_niagara_3,
  53.         .do_4    = xor_niagara_4,
  54.         .do_5    = xor_niagara_5,
  55. };
  56.  
  57. #undef XOR_TRY_TEMPLATES
  58. #define XOR_TRY_TEMPLATES                \
  59.     do {                        \
  60.         xor_speed(&xor_block_VIS);        \
  61.         xor_speed(&xor_block_niagara);        \
  62.     } while (0)
  63.  
  64. /* For VIS for everything except Niagara.  */
  65. #define XOR_SELECT_TEMPLATE(FASTEST) \
  66.     (tlb_type == hypervisor ? &xor_block_niagara : &xor_block_VIS)
  67.