linux/drivers/firmware/dcdbas.c
<<
>>
Prefs
   1/*
   2 *  dcdbas.c: Dell Systems Management Base Driver
   3 *
   4 *  The Dell Systems Management Base Driver provides a sysfs interface for
   5 *  systems management software to perform System Management Interrupts (SMIs)
   6 *  and Host Control Actions (power cycle or power off after OS shutdown) on
   7 *  Dell systems.
   8 *
   9 *  See Documentation/dcdbas.txt for more information.
  10 *
  11 *  Copyright (C) 1995-2006 Dell Inc.
  12 *
  13 *  This program is free software; you can redistribute it and/or modify
  14 *  it under the terms of the GNU General Public License v2.0 as published by
  15 *  the Free Software Foundation.
  16 *
  17 *  This program is distributed in the hope that it will be useful,
  18 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  19 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20 *  GNU General Public License for more details.
  21 */
  22
  23#include <linux/platform_device.h>
  24#include <linux/dma-mapping.h>
  25#include <linux/errno.h>
  26#include <linux/gfp.h>
  27#include <linux/init.h>
  28#include <linux/kernel.h>
  29#include <linux/mc146818rtc.h>
  30#include <linux/module.h>
  31#include <linux/reboot.h>
  32#include <linux/sched.h>
  33#include <linux/smp.h>
  34#include <linux/spinlock.h>
  35#include <linux/string.h>
  36#include <linux/types.h>
  37#include <linux/mutex.h>
  38#include <asm/io.h>
  39
  40#include "dcdbas.h"
  41
  42#define DRIVER_NAME             "dcdbas"
  43#define DRIVER_VERSION          "5.6.0-3.2"
  44#define DRIVER_DESCRIPTION      "Dell Systems Management Base Driver"
  45
  46static struct platform_device *dcdbas_pdev;
  47
  48static u8 *smi_data_buf;
  49static dma_addr_t smi_data_buf_handle;
  50static unsigned long smi_data_buf_size;
  51static u32 smi_data_buf_phys_addr;
  52static DEFINE_MUTEX(smi_data_lock);
  53
  54static unsigned int host_control_action;
  55static unsigned int host_control_smi_type;
  56static unsigned int host_control_on_shutdown;
  57
  58/**
  59 * smi_data_buf_free: free SMI data buffer
  60 */
  61static void smi_data_buf_free(void)
  62{
  63        if (!smi_data_buf)
  64                return;
  65
  66        dev_dbg(&dcdbas_pdev->dev, "%s: phys: %x size: %lu\n",
  67                __func__, smi_data_buf_phys_addr, smi_data_buf_size);
  68
  69        dma_free_coherent(&dcdbas_pdev->dev, smi_data_buf_size, smi_data_buf,
  70                          smi_data_buf_handle);
  71        smi_data_buf = NULL;
  72        smi_data_buf_handle = 0;
  73        smi_data_buf_phys_addr = 0;
  74        smi_data_buf_size = 0;
  75}
  76
  77/**
  78 * smi_data_buf_realloc: grow SMI data buffer if needed
  79 */
  80static int smi_data_buf_realloc(unsigned long size)
  81{
  82        void *buf;
  83        dma_addr_t handle;
  84
  85        if (smi_data_buf_size >= size)
  86                return 0;
  87
  88        if (size > MAX_SMI_DATA_BUF_SIZE)
  89                return -EINVAL;
  90
  91        /* new buffer is needed */
  92        buf = dma_alloc_coherent(&dcdbas_pdev->dev, size, &handle, GFP_KERNEL);
  93        if (!buf) {
  94                dev_dbg(&dcdbas_pdev->dev,
  95                        "%s: failed to allocate memory size %lu\n",
  96                        __func__, size);
  97                return -ENOMEM;
  98        }
  99        /* memory zeroed by dma_alloc_coherent */
 100
 101        if (smi_data_buf)
 102                memcpy(buf, smi_data_buf, smi_data_buf_size);
 103
 104        /* free any existing buffer */
 105        smi_data_buf_free();
 106
 107        /* set up new buffer for use */
 108        smi_data_buf = buf;
 109        smi_data_buf_handle = handle;
 110        smi_data_buf_phys_addr = (u32) virt_to_phys(buf);
 111        smi_data_buf_size = size;
 112
 113        dev_dbg(&dcdbas_pdev->dev,+code=dev" class="sref">dev, "%s: phys: %x size: %lu\n",

2K class="line" name="L113"> 113          11)
smi_data_buf_size >= 1 the Free  Software Foundation.
1a href"line" name="L97">  97            1cdbas.c#L117" id="L17" class="line"" nam11lass="sref">smi_data_buf_phys_addr, static   82  94                smiiiiiiiiiiiiiiiiiiver"
  94                 = (smiiiiiiiiiiiiiiiiiichar>size)
 100

  61static void   21<1/a>smi_data_buf)
 113        dev_dbg"%s: phys: %x size: %lu\n",
 113          "line" name="L97">  97            1are/dcdba1s.c#L24" id="L24" class=1"line12)
static   82  94                smiiiiiiiiiiiiiiiiiiver"
  94                smiiiiiiiiiiiiiiiiiichar>size)
 100
  61static void smi_data_buf)
 113        dev_dbg
2K class="line" name="L113"> 113          97            1vers/firm1ware/dcdbas.c#L31" id="L131" c13="+code=smi_data_buf_size" class="sref">smi3right (C)  1995-2006 Dell Inc.  82
2K clasnstora#L112ver"
  94                f">smiiiiiiiiiiiiiiiiiiver"
  94                (&  82 100
  61static void  */
,
smi_data_buf_handle;
  82  82;
,
smi_datauf" class="sref">bufmplsnstrtoulme="L82">  82smi_data_buf)
 113          40#include "1;;
smi_ id="L106" class="line" name="L106"> 106
  42#defin1e size;
;
  43#define   73          82buL79" id="L79" class="line" name="L79">  79,
smi_datamware/dcdbas.c#L52" id="L52" class="lin1"firmware1code=DRIVER_DESCRIPTION"1 clas14"L104" class="line" name="L1pes.hfun_phys_addr;
"Dell Systems 1Manag14             */
  82 100
  461static struct   82;
smi_data_buf_phys_addr,   14       149static   97            1ware/dcdb1as.c#L50" id="L50" class1="lin15s="line" name="L40">  40#include "1ne" name=1"L51">  51static u32  82
;
  82  82  94                  52static   94                f">smiiiiiiiichar>size)
  82  82 100
  61static void                 return;7clasname="L82">  82  82;
static unsigned int   57<1/a>
<15       82birmwarispad_from_="L58"s_addr;
smi_data_buf)
dma_allopos="line" name="Lposcdbary size %lu\n& href="+code=dcdbas_pdev" class="sref">dcdbas_pdev->smiiiiiiiiiiiiiiiL114" class="line" name="2;,

2K class="line" name="L113"> 113        
<16)   82;
smi_d"line" name="L97">  97            1href="dri1vers/firmware/dcdbas.c#L163" i16        smi_d1ata_b16me="L54">  5ass="sref">u32  82  82  82  94                 16                     
  94                dcdbas_pdev->smiiiiiiiichar>size)
  82  82  61static void smi_data_buf_size);7clasname="L82">  82  82;
dev,   99          87
  711171" class="line" name=ze > MAX_SMI_DATA_BUF_SIZE)
smi_data_buf,   73        ;
)
  82buL79" id="L79" class="line" name="L79">  79  82 100
  76<1/a>
<178               82MAX_SMI_DATA_BUF_SIZE)

<18smi_data_buf_handle" class="        if ( 107        /* + *smi_data_buf)
)   82bcoufer is needed */;
  82;
;
 1 83  ="+code*  82;
dma1_addr_t   74          85        if (<1a hre18="line" name="L105"> 105        size1/a>)
<54">  5ass="sref">u32  82
  94                  8188             smiiiiiiiiiiiiiiiiiiiiver"
  94                  881        if (siiiiiiiiiiiiiiiiiiiiiiiiichar>size)
 100
  61static void smi_data_buf)
 113        dev_dbg  74        si1zesmi_data_buf, );
  5ass="sref">u32  82,

  94                de1v_dbg1/a>(&  94                  951 1                      size)
  82 100
  96   1     1      name="L61">  61static void   82  82;
;
  92class="co2ment">/* memory zeroed b2 dma_20)   82buL79" id="L79" class="line" name="L79">  79, ;

  82 100
(&  82;
 105        2mi_data_buf_fre114" class="liivers/firmware/dcdbas.c#L53" id="L53" class="line" name="uf" class="sref">bufmplsnstrtoulme="L82">  82smi_data_buf)
 113         102 2      ine" name="L74">  74          99         = (u21 name="L50">  50static sclasname="L82">  82  94                 111       2
  94                 =  100
->  61static void   215107" class="="+code*smi_data_buf)
 113        dev_dbghost_control_acine" name="L113"> 113        
  74        
21 56static unsigned int dcdbas_pdevsclasname="L82">  82  94                siiiiiiiiiiiiiiiiiiiiiiiii===ver"
  94                smiiiiiiiiiiiiiiiiiiconstichar>size)
  82 100
 = (smi_data_buf_re22>
host_control_acuf" class="sref">bufmplsnstrtoulme="L82">  82smi_data_buf)
 113          21<2/a>  "line" name="L97">  97            2are/dcdba2s.c#L24" id="L24" class=2"line22)
static   82host_control_smi_tynshowsize: %lu\n53" class="litrol_smi_tynshow#L112ver"
  94                smiiiiiiiiiiiiiiiiiiiiii===ver"
  94                smiiiiiiiiiiiiiiiiiiiiiiiiichar>size)
 100
  61static void smi_data_buf)
 113        dev_dbghost_control_smi_type 113          97            2vers/firm2ware/dcdbas.c#L31" id="L231" c23="+code=smi_data_buf_size" class="sref">sm23right (C2  1995-2006 Dell Inc.  82  94                f">smiiiiiiiiiiiiiiiiiiiiii===ver"
  94                (&  82 100
  61static void host_control_smi_typebufmplsnstrtoulme="L82">  82smi_data_buf)
 113          74          99          75}
  42#defin2e   43#define   78 * smi_data_buf_realloc: g2"ers/firm2ing">"Dell Systems 2Manag24     s/firmware/dcdbas.cL76" ist_corequestmware/dcdbas.c#L76" ist_corequest#L112ver"
;
 100
  462static struct   61static void 2 *  82  82;
  24       82smi_data_buf_size >= 2="L49">  249static   99        ;
bdrivCMD_MAGIC="line" name="LdrivCMD_MAGIClasslef="+code=GFP_KERNEL" class="sref">GFP_2ne" name=2"L51">  51static  101cdbainfomware/dcdbas.c#L45ainfo#L112" id="L112" class="lL76" isme="L112"> 112
 113        dev_dbg(&  52static dev,  113        ze > dev;
(&  74         105        ();
 * smi_data_buf_realloc: g2host_cont2rol_on_shutdown" class="2sref"25/a>              ode=handle" clas id="L9pumask_va mware/dcdbas.c#aid="L9pumask_va #L112" id="L112" class="lold_maskme="L82">  82dcdbas_pdev-> 100
  57<2/a>
<25size" class="sref">size > __func__, size);
  99        
<26)   82;
 113        smi_data_bucpumask_orsmi_d0mmware/dcdbas.c#L52" id="L52" class="lin2="+code=s2mi_data_buf_free" class=2"sref26 &;
GFP_2href="dri2vers/firmware/dcdbas.c#L263" i26cdbas.c#L93" id="L93" class="line" name="L93">  93        if (!buf) {
dcdbas_pdev->dev_dbg(&smi_d2ata_b26a>(&dev,  113         26                     rmware/dcdbas.creame="L82">  82devsize);
dcdbas_pdev->  82MAX_SMI_DATA_BUF_SIZE)
  97            2 href="+c2ode=smi_data_buf_size" c2lass=26-v850/io.h|include/asm-x86/io.h|include/as2lass="sre2f">dev,  * smi_data_buf_realloc: g2s.c#L70" 2id="L70" class="line" na2me="L27loc_coherent h;
 * smi_data_buf_realloc: g2sirmware/2ss="line" name="L71">  721271" class="linasm volatgt; (="comment"> * smi_data_buf_realloc: g2s"+code=s2/dcdbas.c#L72" id="L72" 2class273             dcdbas_ouab classb0,classw1sref">dev_dbg * smi_data_buf_realloc: g2sref="dri2s.c#L73" id="L73" class=2"line27cdbas.c#L93" id="L93" pdev" class="sref">dcdbas_inbaclassw1ef">dev_dbg * smi_data_buf_realloc: g2ssmi_data2ware/dcdbas.c#L74" id="L274" c27a>(& * smi_data_buf_realloc: g2s4" id="L2smi_data_buf_size" class2="sre27                     :" pdev" class="sref">dcdbas_aef">dev_dbg
(& pdev" class="sref">dcdbas_def">dev_dbg
(&  76<2/a>
<278              pdev" class="sref">dcdbas_bef">dev_dbg
siii pdev" class="sref">dcdbas_cef">dev_dbg
 100

<28data_buf_size" class=:" pdev" class="sref">dcdbas_prmwaref">dev_dbg * smi_data_buf_realloc: g2 80st2atic int  113        2(unsigned long sm2afirmware2/a>{
  82;
 2 83  " class="line" set_9pus" id=wed_pssmware/dcdbas.c#set_9pus" id=wed_psssmi_data_buf" class=curuffer is needed */  82 113           82 113          85        if (<2a hre28             ize" clrmware/dcdbas.creame="L82">  82 113        size28 href"line" name="L97">  97            2" id="L862" class="line" name="L862">  828lass="sref">smi_data_buf_phys_addr,   882        if (  75}
  75asa href="drivers/firmware/dcdbas.c#L76" id="L20
si2ze);
de2v_dbg29"L104" name="L78">  78  952 2      e" name="L75">  75asa href="drivers/firmware/dcdbas.c#L76" id="L20the Free2" name="L96">  96   2     2      " name="L78">  78  78  75"pan class="comment"> * smi_data_buf_realloc: g3rivers/fi3mware/dcdbas.c#L99" id="399" c30smi_d54">  5ass="sref">u32  82  94                /* memory zeroed b3 dma_301ata_buf_size" class="sref">smiiiiiiiiver"
  94                size)
  82 100
, GFP_3f="+code=3mi_data_buf_size" class=3sref"3smi_data_buf_sver"
;
 113        (& */
  82smi_data_buf)
 113                        return;7clasname="L82">  82  82;
30 56static unsigned int  103 30-v850/io.h|include/asm-x86/io.h|include/as3ame="L1093> 109        
,

2K class="l < clasof2ver"
;
GFP_3a> = (u311ata_buf_size" class=rmware/dcdbas.creame="L82">  82__func__, ;
 111       3  82MAX_SMI_DATA_BUF_SIZE)
 =   97            3ss="sref"3dcdbas_pdev->  " class="line" s_cocmds_addr;

;

2Kclass="sref">MAX_SMI_DATA_BUF_SIZE)
  31)
        switch
GFP_3a"+code=s3 Software Foundation.
31             case 2:="+code=GFP_KERNEL" class="sref">GFP_3aref="dri317" id="L17" class="line3" nam318             ;
 * smi_data_buf_realloc: g3"108" cla3L18" id="L18" class="lin3e" na31size" class="sref">sirmware/dcdbas.creame="L82">  82
;
MAX_SMI_DATA_BUF_SIZE)
  82 100
 = (srmware/dcdbas.creame="L82">  82;
;
  21<3/a>GFP_3as.c#L23"3 id="L23" class="line" n3ame="32cdbas.c#L93" id="L93" pdev" class=f="drivers/fC idef"=I/ferface ine"pan class="comment"> * smi_data_buf_realloc: g3are/dcdba3s.c#L24" id="L24" class=3"line32a>(&;
;
;

;
;
MAX_SMI_DATA_BUF_SIZE)

  82
;
MAX_SMI_DATA_BUF_SIZE)
  82 100
smiiiirmware/dcdbas.creame="L82">  82;
sibreak_buf_handle;
GFP_3vers/firm3ware/dcdbas.c#L30" id="L330" c331ata_buf_size" class=rmware/dcdbas.cmemseame="L82">  82
dcdb 0ry size %lu\n& href="+cod,

2K class="line" name="L113"> 113         101reame="L82">  82;
GFP_3vre/dcdba3/dcdbas.c#L34" id="L34" 3class33a>(&  82MAX_SMI_DATA_BUF_SIZE)
;
  97            3rivers/fi3rmware/dcdbas.c#L37" id=3"L37"33lass="sref">smi_data_buf_phys_addr,   82;
  82;
  74          42#defin3e   43#define   78<}
"Dell Systems 3Manag34     e" name="L75">  75as ss="sref">host_c: genercode53"  lass="l inea href="drivers/firmware/dcdbas.c#L76" id="L3L46">  463static struct   78  78
2K.a href="drivers/firmware/dcdbas.c#L76" id="L38" id="L438" class="line" name="L438">  34size"e" name="L75">  75"pan class="comment"> * smi_data_buf_realloc: g3="L49">  349static   5s/firmware/dcdbas.css="sref">host_cmware/dcdbas.c#ss="sref">host_c#L112voidlass="line" name="L100"> 100
smi_data_buf_re3ne" name=3"L51">  51static   52static ;
 */
                return;78s_addr;
usr is needed */us/firware/dcdbas.c#L52" id="L52" class="lin3e46">  463"L56" class="line" name=3"L56"35i_data_buf_fre114" class="liu8s_addr;
smi_data_buf_phys_addr,   57<3/a>
<35ref">smi_data_buf_size);apm_cmds_addr;

;

2Kclass="sref">MAX_SMI_DATA_BUF_SIZE)
usr is needed */<54">us/firuf""+code=buf" claESM_STATUSvCMD_UNSUCCESSFUAX_SMI_DATA_BUF_SSM_STATUSvCMD_UNSUCCESSFUAclass="sref">MAX_SMI_DATA_BUF_SIZE)

<36)="sref">MAX_SMI_DATA_BUF_SIZE)
host_control_acief="+code=GFP_KERNEL" class="sref">GFP_3="+code=s3mi_data_buf_free" class=3"sref363            case span>
;
,
smi_d3ata_b36a>(& * smi_data_buf_realloc: g364" id="L364" class="line" name="L364"> 36                     rmware/dcdbas.c"	  mware/dcdbas.c#L	  /fir== 2mware/dcdbas.c#u8s_addr;

2K phys_h114class="sref">MAX_SMI_DATA_BUF_SIZE)
  463">dcdbas_pdev->devMAX_SMI_DATA_BUF_SIZE)
smimware/dcdbas.c#indexs_addr;
devsiiiiiimware/dcdbas.c#indexs_addr;
GFP_3lass="sre3f">dev, s*  82
;
  94                smiiii2t;
;

;
  731371" class="line" name=========*  82  94                smiiii2t;
;

;
  74        )
us  hr-1 asec ided by spec"pan class="comment"> * smi_data_buf_realloc: g3vthe Free3SSoftware Foundation.usr is needed */us/firuf""+code=buf" claESM_STATUSvCMD_UNSUCCESSFUAX_SMI_DATA_BUF_SSM_STATUSvCMD_UNSUCCESSFUAclass="sref">MAX_SMI_DATA_BUF_SIZE)
  76<3/a>
<378               82;

usr is needed */us/fir
<38data_buf_size" class=h;
 * smi_data_buf_realloc: g3 80st3atic int   82
 101ipiniun_phy_irq4estoras_addr;
 3 83 * smi_data_buf_realloc: g3 smi_data3_addr_t   ksr is needed */  ks/firuf""+code=buf" claTIMEOUT_USEC_SHORT_SEMA_BLOCKINGr is needed */MAX_SMI_DATA_BUF_SIZE)
  85        if (<3a hre38                     whgt; (data_buf" class=cmd_54">usr is needed */us/firuf""+code=buf" clainbme="L82">  82
;
 100
size38              smiii=f""+code=buf" claESM_STATUSvCMD_UNSUCCESSFUAX_SMI_DATA_BUF_SSM_STATUSvCMD_UNSUCCESSFUAclasief="+code=GFP_KERNEL" class="sref">GFP_3" id="L863" class="line" name="L863">  8388             smiiiirmware/dcdbas.cnum_>  ksr is needed */  ks/fir--s="sref">MAX_SMI_DATA_BUF_SIZE)
        if (siiiiiiiii*/
devMAX_SMI_DATA_BUF_SIZE)
smiiiiiiize > devMAX_SMI_DATA_BUF_SIZE)
st3    return -  74        
;
si3ze);

de3v_dbg395dbas.c#L93" case span>
  953 39                     rmware/dcdbas.cspinivers_irqsavan>,
  96   3     39               * smi_data_buf_realloc: g30 id="L863ivers/firmware/dcdbas.c#3L97" 398             ;

2K phys_h114class="sref">MAX_SMI_DATA_BUF_SIZE)
sior F2mware/dcdbas.c#indexs_addr;
devMAX_SMI_DATA_BUF_SIZE)
dev/* memory zeroed b4 dma_401ata_buf_size" class="srefmware/dcdbas.c#indexs_addr;
GFP_4f="driver4/firmware/dcdbas.c#L101"4id="L401" class="line" name=========*  82
;

;

;
, s*  82
;

;
  74        )
 * smi_data_buf_realloc: g4="+code=s4i_data_buf_free" class="4ref">40              
host_control_acuff""+code=buf" claHC_ineTYPE_TYPE3re/dcdbas>;
MAX_SMI_DATA_BUF_SIZE)
smiiiirmware/dcdbas.couabme="L82">  82
 104 40size" class="sref">sielseare/dcdbas.c#L52" id="L52" class="lin4ame="L1094> 109        s*  82
u41)="sref">MAX_SMI_DATA_BUF_SIZE)
 111       4 * smi_data_buf_realloc: g4_data_buf4size = ->;
  41)
 * smi_data_buf_realloc: g4_"+code=s4 Software Foundation.
41              usr is needed */us/firuf""+code=buf" clainbme="L82">  82
;
smi_data_buf_phys_addr, sirpdev" class=f="drivers/fwait a fewa hrheef   it execut; * smi_data_buf_realloc: g4/dcdbas.c4#L19" id="L19" class="li4ne" n42data_buf_size" class=rmware/dcdbas.cnum_>  ksr is needed */  ks/firuf""+code=buf" claTIMEOUT_USEC_SHORT_SEMA_BLOCKINGr is needed */MAX_SMI_DATA_BUF_SIZE)
 = (;
usr is needed */<54">us/firuff""+code=buf" claESM_STATUSvCMD_UNSUCCESSFUAX_SMI_DATA_BUF_SSM_STATUSvCMD_UNSUCCESSFUAclasief="+code=GFP_KERNEL" class="sref">GFP_42>
MAX_SMI_DATA_BUF_SIZE)
  21<4/a>s*/
devMAX_SMI_DATA_BUF_SIZE)
 > devMAX_SMI_DATA_BUF_SIZE)
(&  74        
;
GFP_42108" cla4ware/dcdbas.c#L28" id="L428" c42size" class="sref">siline" name="L45"me="L93">  93        if (!buf) {
dcdbas_pdevinvalid ine"ntroaclassusref">dev_dbg(&s*dev, host_control_aci_buf_handle;
 > devMAX_SMI_DATA_BUF_SIZE)
  74         0s="sref">MAX_SMI_DATA_BUF_SIZE)
(&aine" name="L74">  74        
 105          78<}
  78hoa>initicode53"  lass="la href="drivers/firmware/dcdbas.c#L76" id="L4r108" cla4include/asm-um/io.h|incl4ude/a43size"e" name="L75">  75"pa href="drivers/firmware/dcdbas.c#L76" id="L4m-x86_64/4io.h|include/asm-xtensa/4io.h"44="L89"drivers/firmware/dcdbas.This    75as finished shuttef"=iowns*/  42#defin4e 
2K at  43#define   78 * smi_data_buf_realloc: g4"ers/firm4ing">"Dell Systems 4Manag44     54">  5void""+code=buf" class="sress="sref">houf) {
ho(! 100
  464static struct GFP_4Livers/fi4 *
;
  44ref">smi_data_buf_size);u8s_addr;
;
  449static ;
devMAX_SMI_DATA_BUF_SIZE)
  51static ware/dcdbas.c#L52" id="L52" class="lin4=right (C4L52">  52static ;
;
;
dev 105          464"L56" class="line" name=4"L56"45i_data_buf_fr    ode=handle" clasdrivname="2;n>,

2Kclasief="+code=GFP_KERNEL" class="sref">GFP_4eivers/fi4rol_on_shutdown" class="4sref"458               93        if (!buf) {
dcdbas_pdevnoline"="L58"sref">dev_dbgdev, ;
  57<4/a>
<45size" class="sref">sizeware/dcdbas.c#L52" id="L52" class="lin4 href="dr4ivers/firmware/dcdbas.c#4L59" 46smi_data_buf_ine" name="L74">  74        
<46)="sref">MAX_SMI_DATA_BUF_SIZE)

2K class="l < clasof2ver"
;
GFP_4="+code=s4mi_data_buf_free" class=4"sref463             
  93        if (!buf) {
dcdbas_pdevine"="L58"a hhrhr idsref">dev_dbg(&
dev, ;
smi_d4ata_b46a>(& 46             ine" name="L74">  74          464">dcdbas_pdev->static unsigned int 
;

;

2Kclass="sref">MAX_SMI_DATA_BUF_SIZE)
dev,  * smi_data_buf_realloc: g4s.c#L70" 4id="L70" class="line" na4me="L471ata_buf_size    span>
;
devGFP_4sirmware/4ss="line" name="L71">  741471" class="line" name="+code=buf" claapm_cmds_addr;
devMAX_SMI_DATA_BUF_SIZE)
;
;
MAX_SMI_DATA_BUF_SIZE)
;
MAX_SMI_DATA_BUF_SIZE)
(&host_cmware/dcdbas.c#ss="sref">host_c#L112i_buf_handle;
;
devGFP_4s46">  464SSoftware Foundation.devMAX_SMI_DATA_BUF_SIZE)
  76<4/a>
<478             MAX_SMI_DATA_BUF_SIZE)
si*(data_buf" class=s href="drivef="dri1      ")" id="L112" class="lapm_cmds_addr;
;
;
MAX_SMI_DATA_BUF_SIZE)

<48data_buf_size" class=hmware/dcdbas.css="sref">host_cmware/dcdbas.c#ss="sref">host_c#L112i_buf_handle;
  74        4(unsigned long   74        {
 4 83   78  85        if (<4a hre48     e" name="L75">  75asan class="comment"> * smi_data_buf_realloc: g4athe Free4+code=size" class="sref"4>size48     54">  5s/firmware/dcdbas.cef="drireboot_notifyuf) {
  82 */
(&  8488             smiiiiiiiiiiiivoid""line" name="L45unuseds_addr;
MAX_SMI_DATA_BUF_SIZE)
        if (GFP_4 href="dr4ivers/firmware/dcdbas.c#4L89" 49data_buf_sizeswitch
GFP_4 80st4    return -GFP_40
;
GFP_40firmware4de=size" class="sref">si4ze
devGFP_40ref="dri4>);

hoson_shutiowns="lief="+code=GFP_KERNEL" class="sref">GFP_4 smi_data4dev_dbg" class="sref">de4v_dbg49a>(& * smi_data_buf_realloc: g4 4" id="L4s="line" name="L95">  954 49                     " class=hmware/dcdbas.cprs/fys_addr;
dcdbas_Please wait or Fshutiown ef">dev_dbg * smi_data_buf_realloc: g4 the Free4" name="L96">  96   4     49              dcdbas_ap" naa hrf="platI...sref">dev_dbg;
houf) {
ho(!;
siine" name="L74">  74        ;
/* memory zeroed b5 dma_501ata_buf_sizeine" name="L74">  74          74        si5mi_da503            ize" cl*devMAX_SMI_DATA_BUF_SIZE)
  74        de504" i50)
  5ver"
;
  82GFP_5="+code=s5i_data_buf_free" class="5ref">50             .ata_buf" class=notifier_c ids_addr;
(&(& 50size" class=".ata_buf" class=priorityuf) {
)
 109        MAX_SMI_DATA_BUF_SIZE)
 = (u51)="sref">MAX_SMI_DATA_BUF_SIZE)
 111       5  5"+code=buf" claDCDBAS_BIN_ATTR_RWr is needed */,
;
->  5ver"
;
GFP_5_href="dr54" class="line" name="L154">  51a>(&,
(&

51     }s="sref">MAX_SMI_DATA_BUF_SIZE)
smi_data_buf_phys_addr,   5"+code=buf" claDCDBAS_DEV_ATTR_RWr is needed */
2K class="li_buf_handle;
  5"+code=buf" claDCDBAS_DEV_ATTR_ROr is needed */
2K phys_h114clasi_buf_handle;
  5"+code=buf" claDCDBAS_DEV_ATTR_WOr is needed */  5"+code=buf" claDCDBAS_DEV_ATTR_RWr is needed */;
  21<5/a>  5"+code=buf" claDCDBAS_DEV_ATTR_RWr is needed */host_control_aci_buf_handle;
  5"+code=buf" claDCDBAS_DEV_ATTR_RWr is needed */hoson_shutiowns="li_buf_handle;
)
  5ver"
;
GFP_5/"+code=s5s/firmware/dcdbas.c#L26"5 id="527>(&,
(&,
(&(&;
(& = ((&
(&(&MAX_SMI_DATA_BUF_SIZE)
)
  5ver"
GFP_5a"+code=s5rmware/dcdbas.c#L36" id=5"L36"53             .ata_buf" class=atsrDs_addr;
(&MAX_SMI_DATA_BUF_SIZE)
  5s/firmware/dcdbas.c_i   inits_addr;
MAX_SMI_DATA_BUF_SIZE)
GFP_5mers/firm5"drivers/firmware/dcdbas5.h" c54#L91" id="L91*/firmware/dcdbas.ccmware/dcdbas.c#i#L11,srmware/dcdbas.cerrorr is needed */MAX_SMI_DATA_BUF_SIZE)
  42#defin5e   43#define ;
devhost_control_acuf""+code=buf" claHC_ineTYPE_NONEs="sref">dev"Dell Systems 5Manag54="line" name="L105"> 105          465static struct  * smi_data_buf_realloc: g5Livers/fi5 *  78ine"c ids require"="L58"ah114esses be1*/ 32-bit a114ess"drice.a href="drivers/firmware/dcdbas.c#L76" id="L58" id="L458" class="line" name="L458">  54size"e" name="L75">  75"ssssssss* This is done by settef"=theFDMA mask below.a href="drivers/firmware/dcdbas.c#L76" id="L5="L49">  549static  * smi_data_buf_realloc: g5=ers/firm5as.c#L50" id="L50" class5="lin551ata_buf_sizermware/dcdbas.cef="drip">buf) {
;
  51static buf) {
buf) {
;
  52static ;

MAX_SMI_DATA_BUF_SIZE)
MAX_SMI_DATA_BUF_SIZE)
  465"L56" class="line" name=5"L56"55 56static unsigned int GFP_557" class5="line" name="L57">  57<5/a>
<55size" class="sref">sie114" class="lierrorr is needed */,
GFP_5 href="dr5ivers/firmware/dcdbas.c#5L59" 56data_buf_size" class="sref">smiiiiiiilass="sref">sie114" class="lief="dribin_atsrDs_addr;

<561ata_buf_size" class=    span>
GFP_5 e" name=5dcdbas.c#L61" id="L61" c5lass=561" class="line" name=" class=whgt; (-> MAX_SMI_DATA_BUF_SIZE)
sie114" class="liiysfs_remov=_bin_filan>,
GFP_5 s.c#L23"5vers/firmware/dcdbas.c#L563" i56cdbas.c#L93" id="L93" smiiiiiiilass="sref">sie114" class="lief="dribin_atsrDs_addr;
smi_d5ata_b56a>(&sie114" class="liiysfs_remov=_groupr is needed */;
 56                     " class=ize" cl*MAX_SMI_DATA_BUF_SIZE)
  465">dcdbas_pdev->  74          74        dev,   82;
MAX_SMI_DATA_BUF_SIZE)
  751571" class="linrmware/dcdbas.ceev_infomware/dcdbas.c#    info#L112" id="L112" class="l   "L94" class="line" nammware/dcdbas.c#L94" id="L94" class="line" names_pdev" class="sref">dcdbas_pdevdev_dbg(&;
;
(& 0s="sref">MAX_SMI_DATA_BUF_SIZE)
  74          465SSoftware Foundation.static unsigned int   76<5/a>
<578    54">  5s/firmware/dcdbas.c_i   exits_addr;
  82
MAX_SMI_DATA_BUF_SIZE)
GFP_5row SMI d5ata buffer if needed
<58data_buf_size*/firmware/dcdbas.ccmware/dcdbas.c#i#L11s="sref">MAX_SMI_DATA_BUF_SIZE)
st5atic int MAX_SMI_DATA_BUF_SIZE)
5(unsigned long   82;
;
 5 83,
;
 ;
  85        if (<5a hre58="line" name="L105"> 105        size58             ze 0s="sref">MAX_SMI_DATA_BUF_SIZE)
  8588    ine" name="L74">  74          5ver"
GFP_5 80st5    return -GFP_5 lloc5href="drivers/firmware/d5cdbas591" class="line" name=.ata_buf" class=nwarrol_action" clanwar" classf""+code=buf" claDRIVER_NAMEs="sref">devGFP_50firmware5de=size" class="sref">si5zedevGFP_50s.c#L23"5>);
GFP_50smi_data5dev_dbg" class="sref">de5v_dbg59a>(&GFP_504" id="L5s="line" name="L95">  955 59             .ata_buf" class=remov=me="L82">  82  82GFP_50the Free5" name="L96">  96   5     59     }s="sref">MAX_SMI_DATA_BUF_SIZE)
smi_data_buf_phys_addr,   75}
  75asan class="comment"> * smi_data_buf_realloc: g6f="driver6/firmware/dcdbas.c#L101"6id="L601" cl54">  5s/firmware/dcdbas.c_iinits_addr;
;
 100
si6mi_da603    f="+code=GFP_KERNEL" class="sref">GFP_6f4" class6b);
MAX_SMI_DATA_BUF_SIZE)
de604" i60)
                return;errorr is needed */60i_data_buf_fr    span>
MAX_SMI_DATA_BUF_SIZE)
MAX_SMI_DATA_BUF_SIZE)
 109        buf) {
dev;
u611ata_buf_size    ode=handle" classs="sref">buf) {
GFP_6"line" na6e="L111"> 111       6MAX_SMI_DATA_BUF_SIZE)
 = MAX_SMI_DATA_BUF_SIZE)
->MAX_SMI_DATA_BUF_SIZE)
  61)
                return;errorr is needed */;
buf) {
MAX_SMI_DATA_BUF_SIZE)

61i_data_buf_fr    span>
MAX_SMI_DATA_BUF_SIZE)
MAX_SMI_DATA_BUF_SIZE)
 0s="sref">MAX_SMI_DATA_BUF_SIZE)
 = (MAX_SMI_DATA_BUF_SIZE)

GFP_62data_buf6="line" name="L21">  21<6/a>;
buf) {
MAX_SMI_DATA_BUF_SIZE)
GFP_625" class6s.c#L24" id="L24" class=6"line62"L104" class="line" name="L1platformi de/as_unregisterrol_action" claplatformi de/as_unregister#L112" id="L112" class="l f="dri de/asrol_action" claef="dri de/as#L11i_buf_handle;
 *MAX_SMI_DATA_BUF_SIZE)
MAX_SMI_DATA_BUF_SIZE)
smi_data_buf_phys_addr,   75}
  75asan class="comment"> * smi_data_buf_realloc: g6a>
  5void""+code=buf" cla__exits_addr;
;
 100
GFP_6as.c#L23"6s/firmware/dcdbas.c#L33"6 id="63de=dev" classepdev" class=f="drivers/v_dbg * smi_data_buf_realloc: g6vre/dcdba6/dcdbas.c#L34" id="L34" 6class63"L104" name="L78">  78 * smi_data_buf_realloc: g6vspan>
  75aaaaaaaaa* before platformi   ict_unregister#Ldbg * smi_data_buf_realloc: g6v"+code=s6rmware/dcdbas.c#L36" id=6"L36"63     "drivers/firmware/dcdbassssssss*an class="comment"> * smi_data_buf_realloc: g6aref="dri6rmware/dcdbas.c#L37" id=6"L37"638            t;
  82;
 * smi_data_buf_realloc: g6mers/firm6are/dcdbas.c#L40" id="L460" cl64s="lie" name="L75">  75aaaaaaaaa* We havea hrfree=theF="L58"aher/ instead of ef="driremov=#Lclass="comment"> * smi_data_buf_realloc: g6m>
  75aaaaaaaaa* because only1*/ module exit   * smi_data_buf_realloc: g6mdata_buf6ame="L42">  42#defin6e   75aaaaaaaaa*  id sysfs atsrebut=s belongef"= hrthis module haveabeen#Lclass="comment"> * smi_data_buf_realloc: g6ms.c#L23"643">  43#define   78 * smi_data_buf_realloc: g6;span>
"Dell Systems 6Manag644                return;ive"
	  ="2;  466static struct buf) {
MAX_SMI_DATA_BUF_SIZE)

  64size"}="sref">MAX_SMI_DATA_BUF_SIZE)
  649static MAX_SMI_DATA_BUF_SIZE)
;
  51static ;
  52static dcdbas_ (MI_D naapf">dev_dbgdcdbas_)ef">dev_dbg;
;
dcdbas_Deid Inc.ef">dev_dbg;
  466"L56" class="line" name=6"L56"65 56devdcdbas_GPLef">dev_dbg;
  78="Limef"= hrbe by Deid *an class="comment"> * smi_data_buf_realloc: g657" class6="line" name="L57">  57<6/a>
<65size"rmware/dcdbas.cMODULE_ALIASr is needed */dcdbas_dmi:*:[bs]vnD[Ee][Ll][Ll]*:*ef">dev_dbg;



TheForigefal LXR softf="d by theFuf_handlehttp://sourceforge.net/projects/lxsr>LXR 78unityl_ac,rthis experi8lxs@areux.nol_ac.
lxs.areux.no kindly1ss="edaby uf_handlehttp://www.redpill-arepro.no">Redpill Lrepro AS#L11, provid8"aof Lreux lassultef"=and opera" nas servicts since 1995.