summaryrefslogtreecommitdiffstats
path: root/src/interface/linux
diff options
context:
space:
mode:
Diffstat (limited to 'src/interface/linux')
-rw-r--r--src/interface/linux/linux_acpi.c12
-rw-r--r--src/interface/linux/linux_api.c1
-rw-r--r--src/interface/linux/linux_pci.c1
-rw-r--r--src/interface/linux/linux_smbios.c9
-rw-r--r--src/interface/linux/linux_sysfs.c9
-rw-r--r--src/interface/linux/linux_uaccess.c11
-rw-r--r--src/interface/linux/linux_umalloc.c31
7 files changed, 32 insertions, 42 deletions
diff --git a/src/interface/linux/linux_acpi.c b/src/interface/linux/linux_acpi.c
index e658936f2..21a2e27cc 100644
--- a/src/interface/linux/linux_acpi.c
+++ b/src/interface/linux/linux_acpi.c
@@ -21,6 +21,7 @@ FILE_LICENCE ( GPL2_OR_LATER );
#include <stdlib.h>
#include <stdio.h>
+#include <string.h>
#include <errno.h>
#include <ipxe/linux_api.h>
#include <ipxe/linux_sysfs.h>
@@ -42,7 +43,7 @@ struct linux_acpi_table {
/** Index */
unsigned int index;
/** Cached data */
- userptr_t data;
+ void *data;
};
/** List of cached ACPI tables */
@@ -53,9 +54,10 @@ static LIST_HEAD ( linux_acpi_tables );
*
* @v signature Requested table signature
* @v index Requested index of table with this signature
- * @ret table Table, or UNULL if not found
+ * @ret table Table, or NULL if not found
*/
-static userptr_t linux_acpi_find ( uint32_t signature, unsigned int index ) {
+static const struct acpi_header * linux_acpi_find ( uint32_t signature,
+ unsigned int index ) {
struct linux_acpi_table *table;
struct acpi_header *header;
union {
@@ -101,7 +103,7 @@ static userptr_t linux_acpi_find ( uint32_t signature, unsigned int index ) {
filename, strerror ( rc ) );
goto err_read;
}
- header = user_to_virt ( table->data, 0 );
+ header = table->data;
if ( ( ( ( size_t ) len ) < sizeof ( *header ) ) ||
( ( ( size_t ) len ) < le32_to_cpu ( header->length ) ) ) {
rc = -ENOENT;
@@ -121,7 +123,7 @@ static userptr_t linux_acpi_find ( uint32_t signature, unsigned int index ) {
err_read:
free ( table );
err_alloc:
- return UNULL;
+ return NULL;
}
/**
diff --git a/src/interface/linux/linux_api.c b/src/interface/linux/linux_api.c
index 21024ede1..459e39fd5 100644
--- a/src/interface/linux/linux_api.c
+++ b/src/interface/linux/linux_api.c
@@ -225,6 +225,7 @@ int __asmcall linux_poll ( struct pollfd *fds, unsigned int nfds,
ret = poll ( fds, nfds, timeout );
if ( ret == -1 )
linux_errno = errno;
+ return ret;
}
/**
diff --git a/src/interface/linux/linux_pci.c b/src/interface/linux/linux_pci.c
index 300844737..a3a0828c1 100644
--- a/src/interface/linux/linux_pci.c
+++ b/src/interface/linux/linux_pci.c
@@ -188,6 +188,7 @@ int linux_pci_write ( struct pci_device *pci, unsigned long where,
return rc;
}
+PROVIDE_PCIAPI_INLINE ( linux, pci_can_probe );
PROVIDE_PCIAPI_INLINE ( linux, pci_discover );
PROVIDE_PCIAPI_INLINE ( linux, pci_read_config_byte );
PROVIDE_PCIAPI_INLINE ( linux, pci_read_config_word );
diff --git a/src/interface/linux/linux_smbios.c b/src/interface/linux/linux_smbios.c
index 981873943..1450fcf1b 100644
--- a/src/interface/linux/linux_smbios.c
+++ b/src/interface/linux/linux_smbios.c
@@ -19,6 +19,7 @@
FILE_LICENCE ( GPL2_OR_LATER );
+#include <string.h>
#include <errno.h>
#include <ipxe/linux_api.h>
#include <ipxe/linux_sysfs.h>
@@ -35,7 +36,7 @@ static const char smbios_entry_filename[] =
static const char smbios_filename[] = "/sys/firmware/dmi/tables/DMI";
/** Cache SMBIOS data */
-static userptr_t smbios_data;
+static void *smbios_data;
/**
* Find SMBIOS
@@ -46,7 +47,7 @@ static userptr_t smbios_data;
static int linux_find_smbios ( struct smbios *smbios ) {
struct smbios3_entry *smbios3_entry;
struct smbios_entry *smbios_entry;
- userptr_t entry;
+ void *entry;
void *data;
int len;
int rc;
@@ -59,7 +60,7 @@ static int linux_find_smbios ( struct smbios *smbios ) {
smbios_entry_filename, strerror ( rc ) );
goto err_entry;
}
- data = user_to_virt ( entry, 0 );
+ data = entry;
smbios3_entry = data;
smbios_entry = data;
if ( ( len >= ( ( int ) sizeof ( *smbios3_entry ) ) ) &&
@@ -98,6 +99,7 @@ static int linux_find_smbios ( struct smbios *smbios ) {
return 0;
ufree ( smbios_data );
+ smbios_data = NULL;
err_read:
err_version:
ufree ( entry );
@@ -116,6 +118,7 @@ static void linux_smbios_shutdown ( int booting __unused ) {
/* Free SMBIOS data */
ufree ( smbios_data );
+ smbios_data = NULL;
}
/** SMBIOS shutdown function */
diff --git a/src/interface/linux/linux_sysfs.c b/src/interface/linux/linux_sysfs.c
index 4f0027cd4..321824ba9 100644
--- a/src/interface/linux/linux_sysfs.c
+++ b/src/interface/linux/linux_sysfs.c
@@ -42,8 +42,8 @@ FILE_LICENCE ( GPL2_OR_LATER );
* @v data Data to fill in
* @ret len Length read, or negative error
*/
-int linux_sysfs_read ( const char *filename, userptr_t *data ) {
- userptr_t tmp;
+int linux_sysfs_read ( const char *filename, void **data ) {
+ void *tmp;
ssize_t read;
size_t len;
int fd;
@@ -59,7 +59,7 @@ int linux_sysfs_read ( const char *filename, userptr_t *data ) {
}
/* Read file */
- for ( *data = UNULL, len = 0 ; ; len += read ) {
+ for ( *data = NULL, len = 0 ; ; len += read ) {
/* (Re)allocate space */
tmp = urealloc ( *data, ( len + LINUX_SYSFS_BLKSIZE ) );
@@ -70,8 +70,7 @@ int linux_sysfs_read ( const char *filename, userptr_t *data ) {
*data = tmp;
/* Read from file */
- read = linux_read ( fd, user_to_virt ( *data, len ),
- LINUX_SYSFS_BLKSIZE );
+ read = linux_read ( fd, ( *data + len ), LINUX_SYSFS_BLKSIZE );
if ( read == 0 )
break;
if ( read < 0 ) {
diff --git a/src/interface/linux/linux_uaccess.c b/src/interface/linux/linux_uaccess.c
index ea2d8057c..7f7f8931b 100644
--- a/src/interface/linux/linux_uaccess.c
+++ b/src/interface/linux/linux_uaccess.c
@@ -27,12 +27,5 @@ FILE_LICENCE(GPL2_OR_LATER);
*
*/
-PROVIDE_UACCESS_INLINE(linux, user_to_phys);
-PROVIDE_UACCESS_INLINE(linux, virt_to_user);
-PROVIDE_UACCESS_INLINE(linux, user_to_virt);
-PROVIDE_UACCESS_INLINE(linux, userptr_add);
-PROVIDE_UACCESS_INLINE(linux, memcpy_user);
-PROVIDE_UACCESS_INLINE(linux, memmove_user);
-PROVIDE_UACCESS_INLINE(linux, memset_user);
-PROVIDE_UACCESS_INLINE(linux, strlen_user);
-PROVIDE_UACCESS_INLINE(linux, memchr_user);
+PROVIDE_UACCESS_INLINE(linux, phys_to_virt);
+PROVIDE_UACCESS_INLINE(linux, virt_to_phys);
diff --git a/src/interface/linux/linux_umalloc.c b/src/interface/linux/linux_umalloc.c
index a7250fa5b..ab5770e9c 100644
--- a/src/interface/linux/linux_umalloc.c
+++ b/src/interface/linux/linux_umalloc.c
@@ -31,9 +31,6 @@ FILE_LICENCE(GPL2_OR_LATER);
#include <ipxe/linux_api.h>
-/** Special address returned for empty allocations */
-#define NOWHERE ((void *)-1)
-
/** Poison to make the metadata more unique */
#define POISON 0xa5a5a5a5
#define min(a,b) (((a)<(b))?(a):(b))
@@ -47,7 +44,16 @@ struct metadata
#define SIZE_MD (sizeof(struct metadata))
-/** Simple realloc which passes most of the work to mmap(), mremap() and munmap() */
+/**
+ * Reallocate external memory
+ *
+ * @v old_ptr Memory previously allocated by umalloc(), or NULL
+ * @v new_size Requested size
+ * @ret new_ptr Allocated memory, or NULL
+ *
+ * Calling realloc() with a new size of zero is a valid way to free a
+ * memory block.
+ */
static void * linux_realloc(void *ptr, size_t size)
{
struct metadata md = {0, 0};
@@ -136,19 +142,4 @@ static void * linux_realloc(void *ptr, size_t size)
return ptr;
}
-/**
- * Reallocate external memory
- *
- * @v old_ptr Memory previously allocated by umalloc(), or UNULL
- * @v new_size Requested size
- * @ret new_ptr Allocated memory, or UNULL
- *
- * Calling realloc() with a new size of zero is a valid way to free a
- * memory block.
- */
-static userptr_t linux_urealloc(userptr_t old_ptr, size_t new_size)
-{
- return (userptr_t)linux_realloc((void *)old_ptr, new_size);
-}
-
-PROVIDE_UMALLOC(linux, urealloc, linux_urealloc);
+PROVIDE_UMALLOC(linux, urealloc, linux_realloc);