linux/drivers/pci/htirq.c
<<
n er.33/spa> .33/form .33a n er.3 href="../linux+v3.821./drivers/pci/htirq.c">n er.33img src="../.static/gfx/right.png" alt=">>">n 3/spa> n 3spa> class="lxr_search">n er="+search" method="post" onsubmit="return do_search(this);">n er.33input typ> hidden" nam> navtarget" tion> ">n er.33input typ> text" nam> search" id search">n er.33butt/optyp> submit">Search n 3spa> class="lxr_prefs" .33a href="+prefs?return=drivers/pci/htirq.c"n er.3 onclick="return ajax_prefs();">n er.3Prefs .33/a>n 3/spa> er.3 33/div er.3 33form aco >="ajax+*" method="post" onsubmit="return false;">n 3input typ> hidden" nam> ajax_lookup" id ajax_lookup" tion> ">ner.3 33/form ner.3 33div class="headingbott/m">
3div id file_contents"
 L1">3 313/a>3spa> class="comment">/*3/spa>
 
 L2">3 323/a>3spa> class="comment"> * File:        htirq.c3/spa>
 
 L3">3 333/a>3spa> class="comment"> * Purpose:     Hyp>rtransport Interrupt Capability3/spa>
 
 L4">3 343/a>3spa> class="comment"> *3/spa>
 
 L5">3 353/a>3spa> class="comment"> * Copyright (C) 2006 Linux Networx3/spa>
 
 L6">3 363/a>3spa> class="comment"> * Copyright (C) Eric Biederma> <ebiederma>@lnxi.com>3/spa>
 
 L7">3 373/a>3spa> class="comment"> */3/spa>
 
 L8">3 383/a>n
 L9">3 393/a>#include <linux/irq.h3/a>>n
 L10">3 52/oa>#include <linux/pci.h3/a>>n
 L11">3 11/oa>#include <linux/spinlock.h3/a>>n
 L12">3 12/oa>#include <linux/export.h3/a>>n
 L13">3 13/oa>#include <linux/slab.h3/a>>n
 L14">3 14/oa>#include <linux/htirq.h3/a>>n
 L15">3 153/a>n
 L16">3 163/a>3spa> class="comment">/* Global ht irq lock.3/spa>
 
 L17">3 173/a>3spa> class="comment"> *3/spa>
 
 L18">3 183/a>3spa> class="comment"> * This is needed to serialize access to the data port in hyp>rtransport3/spa>
 
 L19">3 193/a>3spa> class="comment"> * irq capability.3/spa>
 
 L20">3 203/a>3spa> class="comment"> *3/spa>
 
 L21">3 213/a>3spa> class="comment"> * With multiple simultaneous hyp>rtransport irq devices it might pay3/spa>
 
 L22">3 223/a>3spa> class="comment"> * to make this more fine grained.  But start with simple, stupid, and correct.3/spa>
 
 L23">3 233/a>3spa> class="comment"> */3/spa>
 
 L24">3 24/oa>static33a href="+code=DEFINE_SPINLOCK" class="sref">DEFINE_SPINLOCK/oa>(3a href="+code=ht_irq_lock" class="sref">ht_irq_lock/oa>);n
 L25">3 253/a>n
 L26">3 26/oa>struct33a href="+code=ht_irq_cfg" class="sref">ht_irq_cfg/oa> {n
 L27">3 273/a>        struct33a href="+code=pci_dev" class="sref">pci_dev3/a> *3a href="+code=dev" class="sref">dev3/a>;n
 L28">3 283/a>         3spa> class="comment">/* Update callback used to cope with buggy hardware */3/spa>
 
 L29">3 293/a>        3a href="+code=ht_irq_update_t" class="sref">ht_irq_update_t3/a> *3a href="+code=update" class="sref">update3/a>;n
 L30">3 303/a>        unsigned33a href="+code=pos" class="sref">pos3/a>;n
 L31">3 313/a>        unsigned33a href="+code=idx" class="sref">idx3/a>;n
 L32">3 323/a>        struct33a href="+code=ht_irq_msg" class="sref">ht_irq_msg3/a> 3a href="+code=msg" class="sref">msg3/a>;n
 L33">3 333/a>};n
 L34">3 343/a>n
 L35">3 353/a>n
 L36">3 36/oa>void33a href="+code=write_ht_irq_msg" class="sref">write_ht_irq_msg/oa>(unsigned3int33a href="+code=irq" class="sref">irq/oa>, struct33a href="+code=ht_irq_msg" class="sref">ht_irq_msg3/a> *3a href="+code=msg" class="sref">msg3/a>)n
 L37">3 373/a>{n
 L38">3 383/a>        struct33a href="+code=ht_irq_cfg" class="sref">ht_irq_cfg/oa> *3a href="+code=cfg" class="sref">cfg/oa> =33a href="+code=irq_get_handler_data" class="sref">irq_get_handler_data/oa>(3a href="+code=irq" class="sref">irq/oa>);n
 L39">3 393/a>        unsigned3long33a href="+code=flags" class="sref">flags3/a>;n
 L40">3 403/a>        3a href="+code=spin_lock_irqsave" class="sref">spin_lock_irqsave/oa>(&3a href="+code=ht_irq_lock" class="sref">ht_irq_lock/oa>,33a href="+code=flags" class="sref">flags3/a>);n
 L41">3 413/a>        if (3a href="+code=cfg" class="sref">cfg/oa>->3a href="+code=msg" class="sref">msg3/a>.3a href="+code=address_lo" class="sref">address_lo3/a> !=33a href="+code=msg" class="sref">msg3/a>->3a href="+code=address_lo" class="sref">address_lo3/a>) {n
 L42">3 423/a>                3a href="+code=pci_write_config_byte" class="sref">pci_write_config_byte/oa>(3a href="+code=cfg" class="sref">cfg/oa>->3a href="+code=dev" class="sref">dev3/a>,33a href="+code=cfg" class="sref">cfg/oa>->3a href="+code=pos" class="sref">pos3/a> + 2,33a href="+code=cfg" class="sref">cfg/oa>->3a href="+code=idx" class="sref">idx3/a>);n
 L43">3 433/a>                3a href="+code=pci_write_config_dword" class="sref">pci_write_config_dword/oa>(3a href="+code=cfg" class="sref">cfg/oa>->3a href="+code=dev" class="sref">dev3/a>,33a href="+code=cfg" class="sref">cfg/oa>->3a href="+code=pos" class="sref">pos3/a> + 4,33a href="+code=msg" class="sref">msg3/a>->3a href="+code=address_lo" class="sref">address_lo3/a>);n
 L44">3 443/a>        }n
 L45">3 453/a>        if (3a href="+code=cfg" class="sref">cfg/oa>->3a href="+code=msg" class="sref">msg3/a>.3a href="+code=address_hi" class="sref">address_hi3/a> !=33a href="+code=msg" class="sref">msg3/a>->3a href="+code=address_hi" class="sref">address_hi3/a>) {n
 L46">3 463/a>                3a href="+code=pci_write_config_byte" class="sref">pci_write_config_byte/oa>(3a href="+code=cfg" class="sref">cfg/oa>->3a href="+code=dev" class="sref">dev3/a>,33a href="+code=cfg" class="sref">cfg/oa>->3a href="+code=pos" class="sref">pos3/a> + 2,33a href="+code=cfg" class="sref">cfg/oa>->3a href="+code=idx" class="sref">idx3/a> + 1);n
 L47">3 473/a>                3a href="+code=pci_write_config_dword" class="sref">pci_write_config_dword/oa>(3a href="+code=cfg" class="sref">cfg/oa>->3a href="+code=dev" class="sref">dev3/a>,33a href="+code=cfg" class="sref">cfg/oa>->3a href="+code=pos" class="sref">pos3/a> + 4,33a href="+code=msg" class="sref">msg3/a>->3a href="+code=address_hi" class="sref">address_hi3/a>);n
 L48">3 483/a>        }n
 L49">3 493/a>        if (3a href="+code=cfg" class="sref">cfg/oa>->3a href="+code=update" class="sref">update3/a>)n
 L50">3 503/a>                3a href="+code=cfg" class="sref">cfg/oa>->3a href="+code=update" class="sref">update3/a>(3a href="+code=cfg" class="sref">cfg/oa>->3a href="+code=dev" class="sref">dev3/a>,33a href="+code=irq" class="sref">irq/oa>, 3a href="+code=msg" class="sref">msg3/a>);n
 L51">3 513/a>        3a href="+code=spin_unlock_irqrestore" class="sref">spin_unlock_irqrestore/oa>(&3a href="+code=ht_irq_lock" class="sref">ht_irq_lock/oa>,33a href="+code=flags" class="sref">flags3/a>);n
 L52">3 523/a>        3a href="+code=cfg" class="sref">cfg/oa>->3a href="+code=msg" class="sref">msg3/a> = *3a href="+code=msg" class="sref">msg3/a>;n
 L53">3 533/a>}n
 L54">3 543/a>n
 L55">3 55/oa>void33a href="+code=fetch_ht_irq_msg" class="sref">fetch_ht_irq_msg/oa>(unsigned3int33a href="+code=irq" class="sref">irq/oa>, struct33a href="+code=ht_irq_msg" class="sref">ht_irq_msg3/a> *3a href="+code=msg" class="sref">msg3/a>)n
 L56">3 563/a>{n
 L57">3 573/a>        struct33a href="+code=ht_irq_cfg" class="sref">ht_irq_cfg/oa> *3a href="+code=cfg" class="sref">cfg/oa> =33a href="+code=irq_get_handler_data" class="sref">irq_get_handler_data/oa>(3a href="+code=irq" class="sref">irq/oa>);n
 L58">3 583/a>        *3a href="+code=msg" class="sref">msg3/a> =33a href="+code=cfg" class="sref">cfg/oa>->3a href="+code=msg" class="sref">msg3/a>;n
 L59">3 593/a>}n
 L60">3 603/a>n
 L61">3 61/oa>void33a href="+code=mask_ht_irq" class="sref">mask_ht_irq/oa>(struct33a href="+code=irq_data" class="sref">irq_data/oa> *3a href="+code=data" class="sref">data/oa>)n
 L62">3 623/a>{n
 L63">3 633/a>        struct33a href="+code=ht_irq_cfg" class="sref">ht_irq_cfg/oa> *3a href="+code=cfg" class="sref">cfg/oa> =33a href="+code=irq_data_get_irq_handler_data" class="sref">irq_data_get_irq_handler_data/oa>(3a href="+code=data" class="sref">data/oa>);n
 L64">3 643/a>        struct33a href="+code=ht_irq_msg" class="sref">ht_irq_msg3/a> 3a href="+code=msg" class="sref">msg3/a> =33a href="+code=cfg" class="sref">cfg/oa>->3a href="+code=msg" class="sref">msg3/a>;n
 L65">3 653/a>n
 L66">3 663/a>        3a href="+code=msg" class="sref">msg3/a>.3a href="+code=address_lo" class="sref">address_lo3/a> |= 1;n
 L67">3 673/a>        3a href="+code=write_ht_irq_msg" class="sref">write_ht_irq_msg/oa>(3a href="+code=data" class="sref">data/oa>->3a href="+code=irq" class="sref">irq/oa>, &3a href="+code=msg" class="sref">msg3/a>);n
 L68">3 683/a>}n
 L69">3 693/a>n
 L70">3 70/oa>void33a href="+code=unmask_ht_irq" class="sref">unmask_ht_irq/oa>(struct33a href="+code=irq_data" class="sref">irq_data/oa> *3a href="+code=data" class="sref">data/oa>)n
 L71">3 713/a>{n
 L72">3 723/a>        struct33a href="+code=ht_irq_cfg" class="sref">ht_irq_cfg/oa> *3a href="+code=cfg" class="sref">cfg/oa> =33a href="+code=irq_data_get_irq_handler_data" class="sref">irq_data_get_irq_handler_data/oa>(3a href="+code=data" class="sref">data/oa>);n
 L73">3 733/a>        struct33a href="+code=ht_irq_msg" class="sref">ht_irq_msg3/a> 3a href="+code=msg" class="sref">msg3/a> =33a href="+code=cfg" class="sref">cfg/oa>->3a href="+code=msg" class="sref">msg3/a>;n
 L74">3 743/a>n
 L75">3 753/a>        3a href="+code=msg" class="sref">msg3/a>.3a href="+code=address_lo" class="sref">address_lo3/a> &= ~1;n
 L76">3 763/a>        3a href="+code=write_ht_irq_msg" class="sref">write_ht_irq_msg/oa>(3a href="+code=data" class="sref">data/oa>->3a href="+code=irq" class="sref">irq/oa>, &3a href="+code=msg" class="sref">msg3/a>);n
 L77">3 773/a>}n
 L78">3 783/a>n
 L79">3 793/a>3spa> class="comment">/**3/spa>
 
 L80">3 803/a>3spa> class="comment"> * __ht_create_irq - create a> irq and attach it to a device.3/spa>
 
 L81">3 813/a>3spa> class="comment"> * @dev: The hyp>rtransport device to find the irq capability on.3/spa>
 
 L82">3 823/a>3spa> class="comment"> * @idx: Which of the possible irqs to attach to.3/spa>
 
 L83">3 833/a>3spa> class="comment"> * @update: Funco  > to be called whe> changing the htirq message3/spa>
 
 L84">3 843/a>3spa> class="comment"> *3/spa>
 
 L85">3 853/a>3spa> class="comment"> * The irq number of the new irq or a negative error tion> is returned.3/spa>
 
 L86">3 863/a>3spa> class="comment"> */3/spa>
 
 L87">3 873/a>int33a href="+code=__ht_create_irq" class="sref">__ht_create_irq/oa>(struct33a href="+code=pci_dev" class="sref">pci_dev3/a> *3a href="+code=dev" class="sref">dev3/a>,3int33a href="+code=idx" class="sref">idx3/a>,33a href="+code=ht_irq_update_t" class="sref">ht_irq_update_t3/a> *3a href="+code=update" class="sref">update3/a>)n
 L88">3 883/a>{n
 L89">3 893/a>        struct33a href="+code=ht_irq_cfg" class="sref">ht_irq_cfg/oa> *3a href="+code=cfg" class="sref">cfg/oa>;n
 L90">3 903/a>        unsigned3long33a href="+code=flags" class="sref">flags3/a>;n
 L91">3 913/a>        3a href="+code=u32" class="sref">u323/a> 3a href="+code=data" class="sref">data/oa>;n
 L92">3 923/a>        int33a href="+code=max_irq" class="sref">max_irq/oa>;n
 L93">3 933/a>        int33a href="+code=pos" class="sref">pos3/a>;n
 L94">3 943/a>        int33a href="+code=irq" class="sref">irq/oa>;n
 L95">3 953/a>        int33a href="+code=node" class="sref">node/oa>;n
 L96">3 963/a>n
 L97">3 973/a>        3a href="+code=pos" class="sref">pos3/a> =33a href="+code=pci_find_ht_capability" class="sref">pci_find_ht_capability/oa>(3a href="+code=dev" class="sref">dev3/a>,33a href="+code=HT_CAPTYPE_IRQ" class="sref">HT_CAPTYPE_IRQ3/a>);n
 L98">3 983/a>        if (!3a href="+code=pos" class="sref">pos3/a>)n
 L99">3 993/a>                return -3a href="+code=EINVAL" class="sref">EINVAL/oa>;n
 L100">31003/a>n
 L101">31013/a>        3spa> class="comment">/* Verify the idx I want to us> is in range */3/spa>
 
 L102">31023/a>        3a href="+code=spin_lock_irqsave" class="sref">spin_lock_irqsave/oa>(&3a href="+code=ht_irq_lock" class="sref">ht_irq_lock/oa>,33a href="+code=flags" class="sref">flags3/a>);n
 L103">31033/a>        3a href="+code=pci_write_config_byte" class="sref">pci_write_config_byte/oa>(3a href="+code=dev" class="sref">dev3/a>,33a href="+code=pos" class="sref">pos3/a> + 2,31);n
 L104">31043/a>        3a href="+code=pci_read_config_dword" class="sref">pci_read_config_dword/oa>(3a href="+code=dev" class="sref">dev3/a>,33a href="+code=pos" class="sref">pos3/a> + 4, &3a href="+code=data" class="sref">data/oa>);n
 L105">31053/a>        3a href="+code=spin_unlock_irqrestore" class="sref">spin_unlock_irqrestore/oa>(&3a href="+code=ht_irq_lock" class="sref">ht_irq_lock/oa>,33a href="+code=flags" class="sref">flags3/a>);n
 L106">31063/a>n
 L107">31073/a>        3a href="+code=max_irq" class="sref">max_irq/oa> =3(3a href="+code=data" class="sref">data/oa> >> 16) & 0xff;n
 L108">31083/a>        if (33a href="+code=idx" class="sref">idx3/a> > 3a href="+code=max_irq" class="sref">max_irq/oa>)n
 L109">31093/a>                return -3a href="+code=EINVAL" class="sref">EINVAL/oa>;n
 L110">31103/a>n
 L111">31113/a>        3a href="+code=cfg" class="sref">cfg/oa> =33a href="+code=kmalloc" class="sref">kmalloc/oa>(sizeof(*3a href="+code=cfg" class="sref">cfg/oa>),33a href="+code=GFP_KERNEL" class="sref">GFP_KERNEL3/a>);n
 L112">31123/a>        if (!3a href="+code=cfg" class="sref">cfg/oa>)n
 L113">31133/a>                return -3a href="+code=ENOMEM" class="sref">ENOMEM/oa>;n
 L114">31143/a>n
 L115">31153/a>        3a href="+code=cfg" class="sref">cfg/oa>->3a href="+code=dev" class="sref">dev3/a> =33a href="+code=dev" class="sref">dev3/a>;n
 L116">31163/a>        3a href="+code=cfg" class="sref">cfg/oa>->3a href="+code=update" class="sref">update3/a> =33a href="+code=update" class="sref">update3/a>;n
 L117">31173/a>        3a href="+code=cfg" class="sref">cfg/oa>->3a href="+code=pos" class="sref">pos3/a> =33a href="+code=pos" class="sref">pos3/a>;n
 L118">31183/a>        3a href="+code=cfg" class="sref">cfg/oa>->3a href="+code=idx" class="sref">idx3/a> = 0x10 + (3a href="+code=idx" class="sref">idx3/a> * 2);n
 L119">31193/a>        3spa> class="comment">/* Initialize msg to a tion> that will never match the first write. */3/spa>
 
 L120">31203/a>        3a href="+code=cfg" class="sref">cfg/oa>->3a href="+code=msg" class="sref">msg3/a>.3a href="+code=address_lo" class="sref">address_lo3/a> = 0xffffffff;n
 L121">31213/a>        3a href="+code=cfg" class="sref">cfg/oa>->3a href="+code=msg" class="sref">msg3/a>.3a href="+code=address_hi" class="sref">address_hi3/a> = 0xffffffff;n
 L122">31223/a>n
 L123">31233/a>        3a href="+code=node" class="sref">node/oa> =33a href="+code=dev_to_node" class="sref">dev_to_node/oa>(&3a href="+code=dev" class="sref">dev3/a>->3a href="+code=dev" class="sref">dev3/a>);n
 L124">31243/a>        3a href="+code=irq" class="sref">irq/oa> =33a href="+code=create_irq_nr" class="sref">create_irq_nr/oa>(0,33a href="+code=node" class="sref">node/oa>);n
 L125">31253/a>n
 L126">31263/a>        if (3a href="+code=irq" class="sref">irq/oa> <= 0) {n
 L127">31273/a>                3a href="+code=kfree" class="sref">kfree/oa>(3a href="+code=cfg" class="sref">cfg/oa>);n
 L128">31283/a>                return -3a href="+code=EBUSY" class="sref">EBUSY3/a>;n
 L129">31293/a>        }n
 L130">31303/a>        3a href="+code=irq_set_handler_data" class="sref">irq_set_handler_data/oa>(3a href="+code=irq" class="sref">irq/oa>, 3a href="+code=cfg" class="sref">cfg/oa>);n
 L131">31313/a>n
 L132">31323/a>        if (3a href="+code=arch_setup_ht_irq" class="sref">arch_setup_ht_irq/oa>(3a href="+code=irq" class="sref">irq/oa>, 3a href="+code=dev" class="sref">dev3/a>) < 0) {n
 L133">31333/a>                3a href="+code=ht_destroy_irq" class="sref">ht_destroy_irq/oa>(3a href="+code=irq" class="sref">irq/oa>);n
 L134">31343/a>                return -3a href="+code=EBUSY" class="sref">EBUSY3/a>;n
 L135">31353/a>        }n
 L136">31363/a>n
 L137">31373/a>        return 3a href="+code=irq" class="sref">irq/oa>;n
 L138">31383/a>}n
 L139">31393/a>n
 L140">31403/a>3spa> class="comment">/**3/spa>
 
 L141">31413/a>3spa> class="comment"> * ht_create_irq - create a> irq and attach it to a device.3/spa>
 
 L142">31423/a>3spa> class="comment"> * @dev: The hyp>rtransport device to find the irq capability on.3/spa>
 
 L143">31433/a>3spa> class="comment"> * @idx: Which of the possible irqs to attach to.3/spa>
 
 L144">31443/a>3spa> class="comment"> *3/spa>
 
 L145">31453/a>3spa> class="comment"> * ht_create_irq needs to be called for all hyp>rtransport devices3/spa>
 
 L146">31463/a>3spa> class="comment"> * that generate irqs.3/spa>
 
 L147">31473/a>3spa> class="comment"> *3/spa>
 
 L148">31483/a>3spa> class="comment"> * The irq number of the new irq or a negative error tion> is returned.3/spa>
 
 L149">31493/a>3spa> class="comment"> */3/spa>
 
 L150">31503/a>int33a href="+code=ht_create_irq" class="sref">ht_create_irq/oa>(struct33a href="+code=pci_dev" class="sref">pci_dev3/a> *3a href="+code=dev" class="sref">dev3/a>,3int33a href="+code=idx" class="sref">idx3/a>)n
 L151">31513/a>{n
 L152">31523/a>        return 3a href="+code=__ht_create_irq" class="sref">__ht_create_irq/oa>(3a href="+code=dev" class="sref">dev3/a>,33a href="+code=idx" class="sref">idx3/a>,33a href="+code=NULL" class="sref">NULL/oa>);n
 L153">31533/a>}n
 L154">31543/a>n
 L155">31553/a>3spa> class="comment">/**3/spa>
 
 L156">31563/a>3spa> class="comment"> * ht_destroy_irq - destroy a> irq created with ht_create_irq/ospa>
 
 L157">31573/a>3spa> class="comment"> * @irq: irq to be destroyed/ospa>
 
 L158">31583/a>3spa> class="comment"> */ospa>
 
 L159">31593/a>3spa> class="comment"> * This reverses ht_create_irq removing the specified3irq from/ospa>
 
 L160">31603/a>3spa> class="comment"> * existence.  The irq should be free before this happens.3/spa>
 
 L161">31613/a>3spa> class="comment"> */3/spa>
 
 L162">31623/a>void33a href="+code=ht_destroy_irq" class="sref">ht_destroy_irq/oa>(unsigned3int33a href="+code=irq" class="sref">irq/oa>)n
 L163">31633/a>{n
 L164">31643/a>        struct33a href="+code=ht_irq_cfg" class="sref">ht_irq_cfg/oa> *3a href="+code=cfg" class="sref">cfg/oa>;n
 L165">31653/a>n
 L166">31663/a>        3a href="+code=cfg" class="sref">cfg/oa> =33a href="+code=irq_get_handler_data" class="sref">irq_get_handler_data/oa>(3a href="+code=irq" class="sref">irq/oa>);n
 L167">31673/a>        3a href="+code=irq_set_chip" class="sref">irq_set_chip/oa>(3a href="+code=irq" class="sref">irq/oa>, 3a href="+code=NULL" class="sref">NULL/oa>);n
 L168">31683/a>        3a href="+code=irq_set_handler_data" class="sref">irq_set_handler_data/oa>(3a href="+code=irq" class="sref">irq/oa>, 3a href="+code=NULL" class="sref">NULL/oa>);n
 L169">31693/a>        3a href="+code=destroy_irq" class="sref">destroy_irq/oa>(3a href="+code=irq" class="sref">irq/oa>);n
 L170">31703/a>n
 L171">31713/a>        3a href="+code=kfree" class="sref">kfree/oa>(3a href="+code=cfg" class="sref">cfg/oa>);n
 L172">31723/a>}n
 L173">31733/a>n
 L174">31743/a>3a href="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOL/oa>(3a href="+code=__ht_create_irq" class="sref">__ht_create_irq/oa>);n
 L175">31753/a>3a href="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOL/oa>(3a href="+code=ht_create_irq" class="sref">ht_create_irq/oa>);n
 L176">31763/a>3a href="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOL/oa>(3a href="+code=ht_destroy_irq" class="sref">ht_destroy_irq/oa>);n
 L177">31773/a>
The original LXR software by the LXR community/oa>, this experimental vers > by lxr@linux.no3/a>. 3/div 3div class="subfooter"> lxr.linux.no kindly hosted by Redpill Linpro AS/oa>, provider of Linux consulting and operat >s services since 1995. 3/div 3/body 3/html