Sponsored Content
Top Forums Programming Getting compilation error while writing standalone for ddi_get8 Post 302577766 by vijayrajen on Wednesday 30th of November 2011 12:13:50 AM
Old 11-30-2011
Hi Corono,

I saw the header file dditypes.h and found that the the structures ddi_device_acc_attr_t and ddi_acc_handle_t are defined under "ifdef _KERNEL"

So while compiling i set the _KERNEL with -D option.

But now i am getting undefined reference error. Below is the code for accessing pci config space:

Code:
#include <sys/dditypes.h>
#include <sys/conf.h>
#include <sys/ddi.h>
#include <sys/sunddi.h>

#define CONFIG_VENDOR_ID_OFFSET 0x0
#define CONFIG_DEVICE_ID_OFFSET 0x2
#define CONFIG_CLASS_CODE_OFFSET 0x8
#define CONFIG_BASE_ADDR_2_OFFSET 0x18
#define CONFIG_REGS_SIZE 0x40

static struct ddi_device_acc_attr endian_attr = {
  DDI_DEVICE_ATTR_V0,
  DDI_STRUCTURE_LE_ACC,
  DDI_STRICTORDER_ACC
};

xxx_map_regs(dev_info_t *dip) {
  caddr_t configp; /* pointer to configuration space */
  caddr_t mem_reg1; /* pointer to memory space 1 */
  size_t mem_size; /* size of memory space as shown in "reg" */
  ddi_acc_handle_t handle0; /* Access handle for configuration space */
  ddi_acc_handle_t handle2; /* Access handle for memory space 1 */
  ulong_t base_addr2; /* Base address 1 value (rnumber = 2) */
  ushort_t vendor_id, device_id;
  uint_t class_code;
  /*
   * configp is the kernel virtual address that maps to the device
   * configuration space, rnumber is 0.
   */
  int status = ddi_regs_map_setup(dip, 0, &configp, 0, CONFIG_REGS_SIZE,
      &endian_attr, &handle0);
  /*

   * Comparing with the corresponding properties,
   * vendor_id should be 0x00001000.
   * device_id should be 0x0000000f.
   * class_code should be 0x00010000.
   * baddr1 should be 18000.
   */
   vendor_id = ddi_get8(handle0, configp + CONFIG_VENDOR_ID_OFFSET);
   device_id = ddi_get8(handle0, configp + CONFIG_DEVICE_ID_OFFSET);
   base_addr2 = ddi_get64(handle0, configp + CONFIG_BASE_ADDR_2_OFFSET);
   class_code = (uint_t)ddi_get64(handle0, configp + CONFIG_CLASS_CODE_OFFSET);
   class_code = (uint_t)(class_code >> 8);
}

int main()
{
  dev_info_t  *dip;
  dip =  (dev_info_t *)ddi_root_node();
  xxx_map_regs(dip);
  return 0;
}

Below is the error i get when i compile:

Code:
S213:/export/home/vijay/Programs/NEW_PCI # gcc pciinfo.c -D_KERNEL
pciinfo.c: In function `xxx_map_regs':
pciinfo.c:78: warning: passing arg 2 of `ddi_getll' from incompatible pointer type
pciinfo.c:80: warning: passing arg 2 of `ddi_getll' from incompatible pointer type
Undefined                       first referenced
 symbol                             in file
ddi_regs_map_setup                  /var/tmp//ccM91uBL.o
ddi_getb                            /var/tmp//ccM91uBL.o
ddi_root_node                       /var/tmp//ccM91uBL.o
ddi_getll                           /var/tmp//ccM91uBL.o
ld: fatal: Symbol referencing errors. No output written to a.out
collect2: ld returned 1 exit status


Please let me know if ddi system calls have some libraries to be included while compiling.
 

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Pthread compilation error

I have trouble compiling a pthread program on unix system which suppotrs pthreads it gives unresolved _pthread_create _pthread_exit error. what to do? (1 Reply)
Discussion started by: basavaraj_m
1 Replies

2. Programming

Regarding compilation error.

Hi All, I facing the following compilation error; when I implementing the following logic. ostrstream ostr; ostr << (( scAxsm.getRecord( i ).getField( 2 ).getShort())%12)!=0?(( scAxsm.getRecord( i ).getField( 2 ).getShort())/12+1) : (( scAxsm.getRecord( i ).getField( 2 ).getShort())/12) <<... (1 Reply)
Discussion started by: sweta
1 Replies

3. Programming

compilation error

Hi, While trying compile a C++ file in UNIX with gcc whose make rule involves the usage of /usr/ccs/bin/as, I get the following error: /usr/ccs/bin/as: No such file or directory /usr/ccs/bin/as: error: write error on output file "<filename>.o" *** Error code 1 clearmake: Error: Build... (2 Replies)
Discussion started by: smanu
2 Replies

4. Programming

Compilation error

I am compiling a software xchm on solaris 10. First i run './configure' There is no error. But when i start compiling using 'gmake' following error shown /usr/local/include/wx-2.6/wx/x11/brush.h: In copy constructor `wxBrush::wxBrush(const wxBrush&)':... (3 Replies)
Discussion started by: mansoorulhaq
3 Replies

5. Linux

c++ compilation error

Hello every one, here i am attempting to compile a c++ module using gcc.it is throwing a error . error: ==== > make -S dummyCHARGP /usr/local/bin/gcc -g -DDEBUG -DMAT -I. -I/swtemp/usbs/cc/unix-ce/root/subsys/lib/Linux/ -I/opt/dce/include -I/opt/dce/include/dce ... (12 Replies)
Discussion started by: mannam srinivas
12 Replies

6. HP-UX

compilation error

hello everyone, here i am attempting to compile a c++ submodule.OS is HP-UX. here i am getting the following error. ====================================== "Make: Don't know how to make compile. Stop." =================================== could you pls somebody suggest why this error is... (2 Replies)
Discussion started by: mannam srinivas
2 Replies

7. Programming

C Question compilation error

What does the following mean: state_field state_abvr = { "AL","ALABAMA", "AK","ALASKA", . . . }; extern state_field state_abvr; issues we I am facing following compilation issue bosdf9d1:root make CC -I/bto/bcs/shared/include -I/bto/sys/BCS/usr/include ... (1 Reply)
Discussion started by: jaganreddy
1 Replies

8. Programming

Compilation error : Please help

state_field state_abvr = { "AL","ALABAMA", "AK","ALASKA", "AZ","ARIZONA", "AR","ARKANSAS", "CA","CALIFORNIA", "CO","COLORADO", "CT","CONNECTICUT", "DE","DELAWARE", "DC","DISTRICT-OF-COLUMBIA", "FL","FLORIDA", "GA","GEORGIA", "HI","HAWAII", "ID","IDAHO", "IL","ILLINOIS",... (1 Reply)
Discussion started by: jagan_kalluri
1 Replies

9. Programming

Compilation Error

I am getting the below given errors for the following program though all the variables have been declared and used appropriately. Please Help. The environment is AIX. Error: ------ "gbsizeprofile.c", line 67.4: 1506-275 (S) Unexpected text 'void' encountered. "gbsizeprofile.c", line 67.10:... (2 Replies)
Discussion started by: yschd
2 Replies

10. Programming

Proc compilation error.

I'm trying to compile a proc program when use make -f proc.mk , it gives the following error . `/export/home/app/oracle/product/10.2.0/lib/libclntsh.so' is up to date. rateutil.o: No such file or directory Please advise ,, I need urgent help. Thanks, Omar Atia:) (2 Replies)
Discussion started by: atiato
2 Replies
ddi_get8(9F)						   Kernel Functions for Drivers 					      ddi_get8(9F)

NAME
ddi_get8, ddi_get16, ddi_get32, ddi_get64, ddi_getb, ddi_getw, ddi_getl, ddi_getll - read data from the mapped memory address, device reg- ister or allocated DMA memory address SYNOPSIS
#include <sys/ddi.h> #include <sys/sunddi.h> uint8_t ddi_get8(ddi_acc_handle_t handle, uint8_t *dev_addr); uint16_t ddi_get16(ddi_acc_handle_t handle, uint16_t *dev_addr); uint32_t ddi_get32(ddi_acc_handle_t handle, uint32_t *dev_addr); uint64_t ddi_get64(ddi_acc_handle_t handle, uint64_t *dev_addr); INTERFACE LEVEL
Solaris DDI specific (Solaris DDI). PARAMETERS
handle The data access handle returned from setup calls, such as ddi_regs_map_setup(9F). dev_addr Base device address. DESCRIPTION
The ddi_get8(), ddi_get16(), ddi_get32(), and ddi_get64() functions read 8 bits, 16 bits, 32 bits and 64 bits of data, respectively, from the device address, dev_addr. Each individual datum will automatically be translated to maintain a consistent view between the host and the device based on the encoded information in the data access handle. The translation may involve byte-swapping if the host and the device have incompatible endian char- acteristics. For certain bus types, you can call these DDI functions from a high-interrupt context. These types include ISA and SBus buses. See sys- bus(4), isa(4), and sbus(4) for details. For the PCI bus, you can, under certain conditions, call these DDI functions from a high-interrupt context. See pci(4). RETURN VALUES
These functions return the value read from the mapped address. CONTEXT
These functions can be called from user, kernel, or interrupt context. SEE ALSO
ddi_put8(9F), ddi_regs_map_free(9F), ddi_regs_map_setup(9F), ddi_rep_get8(9F), ddi_rep_put8(9F) NOTES
The functions described in this manual page previously used symbolic names which specified their data access size; the function names have been changed so they now specify a fixed-width data size. See the following table for the new name equivalents: +--------------------------------------------------------------+ |Previous Name New Name | |ddi_getb ddi_get8 | |ddi_getw ddi_get16 | |ddi_getl ddi_get32 | |ddi_getll ddi_get64 | +--------------------------------------------------------------+ SunOS 5.10 18 Nov 2004 ddi_get8(9F)
All times are GMT -4. The time now is 09:51 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy