Transformed PAGE_SIZE in sysconf(_SC_PAGE_SIZE)

This commit is contained in:
Abramo Bagnara 2001-02-21 21:59:35 +00:00
parent 1dfd70d11e
commit c663f4f4f7
4 changed files with 26 additions and 18 deletions

View file

@ -68,4 +68,7 @@ typedef enum _snd_set_mode snd_set_mode_t;
#define SND_TRY ((snd_set_mode_t) SND_TRY) #define SND_TRY ((snd_set_mode_t) SND_TRY)
#define SND_TEST ((snd_set_mode_t) SND_TEST) #define SND_TEST ((snd_set_mode_t) SND_TEST)
size_t page_align(size_t size);
size_t page_size(void);
#endif #endif

View file

@ -28,7 +28,6 @@
#include <sys/ioctl.h> #include <sys/ioctl.h>
#include <sys/mman.h> #include <sys/mman.h>
#include <sys/shm.h> #include <sys/shm.h>
#include <asm/page.h>
#include "pcm_local.h" #include "pcm_local.h"
#include "../control/control_local.h" #include "../control/control_local.h"
@ -36,10 +35,6 @@
#define F_SETSIG 10 #define F_SETSIG 10
#endif #endif
#ifndef PAGE_ALIGN
#define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE-1)&PAGE_MASK)
#endif
typedef struct { typedef struct {
int fd; int fd;
int card, device, subdevice; int card, device, subdevice;
@ -366,7 +361,7 @@ static int snd_pcm_hw_mmap_status(snd_pcm_t *pcm)
{ {
snd_pcm_hw_t *hw = pcm->private_data; snd_pcm_hw_t *hw = pcm->private_data;
void *ptr; void *ptr;
ptr = mmap(NULL, PAGE_ALIGN(sizeof(struct sndrv_pcm_mmap_status)), PROT_READ, MAP_FILE|MAP_SHARED, ptr = mmap(NULL, page_align(sizeof(struct sndrv_pcm_mmap_status)), PROT_READ, MAP_FILE|MAP_SHARED,
hw->fd, SND_PCM_MMAP_OFFSET_STATUS); hw->fd, SND_PCM_MMAP_OFFSET_STATUS);
if (ptr == MAP_FAILED || ptr == NULL) { if (ptr == MAP_FAILED || ptr == NULL) {
SYSERR("status mmap failed"); SYSERR("status mmap failed");
@ -381,7 +376,7 @@ static int snd_pcm_hw_mmap_control(snd_pcm_t *pcm)
{ {
snd_pcm_hw_t *hw = pcm->private_data; snd_pcm_hw_t *hw = pcm->private_data;
void *ptr; void *ptr;
ptr = mmap(NULL, PAGE_ALIGN(sizeof(struct sndrv_pcm_mmap_control)), PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, ptr = mmap(NULL, page_align(sizeof(struct sndrv_pcm_mmap_control)), PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED,
hw->fd, SND_PCM_MMAP_OFFSET_CONTROL); hw->fd, SND_PCM_MMAP_OFFSET_CONTROL);
if (ptr == MAP_FAILED || ptr == NULL) { if (ptr == MAP_FAILED || ptr == NULL) {
SYSERR("control mmap failed"); SYSERR("control mmap failed");
@ -395,7 +390,7 @@ static int snd_pcm_hw_mmap_control(snd_pcm_t *pcm)
static int snd_pcm_hw_munmap_status(snd_pcm_t *pcm) static int snd_pcm_hw_munmap_status(snd_pcm_t *pcm)
{ {
snd_pcm_hw_t *hw = pcm->private_data; snd_pcm_hw_t *hw = pcm->private_data;
if (munmap((void*)hw->mmap_status, PAGE_ALIGN(sizeof(*hw->mmap_status))) < 0) { if (munmap((void*)hw->mmap_status, page_align(sizeof(*hw->mmap_status))) < 0) {
SYSERR("status munmap failed"); SYSERR("status munmap failed");
return -errno; return -errno;
} }
@ -405,7 +400,7 @@ static int snd_pcm_hw_munmap_status(snd_pcm_t *pcm)
static int snd_pcm_hw_munmap_control(snd_pcm_t *pcm) static int snd_pcm_hw_munmap_control(snd_pcm_t *pcm)
{ {
snd_pcm_hw_t *hw = pcm->private_data; snd_pcm_hw_t *hw = pcm->private_data;
if (munmap(hw->mmap_control, PAGE_ALIGN(sizeof(*hw->mmap_control))) < 0) { if (munmap(hw->mmap_control, page_align(sizeof(*hw->mmap_control))) < 0) {
SYSERR("control munmap failed"); SYSERR("control munmap failed");
return -errno; return -errno;
} }

View file

@ -24,14 +24,25 @@
#include <sys/poll.h> #include <sys/poll.h>
#include <sys/mman.h> #include <sys/mman.h>
#include <sys/shm.h> #include <sys/shm.h>
#include <asm/page.h>
#include "pcm_local.h" #include "pcm_local.h"
size_t page_size(void)
{
long s = sysconf(_SC_PAGE_SIZE);
assert(s > 0);
return s;
}
#ifndef PAGE_ALIGN size_t page_align(size_t size)
#define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE-1)&PAGE_MASK) {
#endif size_t r;
long psz = sysconf(_SC_PAGE_SIZE);
assert(psz > 0);
r = size % psz;
if (r)
return size + psz - r;
return size;
}
const snd_pcm_channel_area_t *snd_pcm_mmap_running_areas(snd_pcm_t *pcm) const snd_pcm_channel_area_t *snd_pcm_mmap_running_areas(snd_pcm_t *pcm)
{ {
@ -304,7 +315,7 @@ int snd_pcm_mmap(snd_pcm_t *pcm)
size = s; size = s;
} }
size = (size + 7) / 8; size = (size + 7) / 8;
size = PAGE_ALIGN(size); size = page_align(size);
switch (i->type) { switch (i->type) {
case SND_PCM_AREA_MMAP: case SND_PCM_AREA_MMAP:
ptr = mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, i->u.mmap.fd, i->u.mmap.offset); ptr = mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, i->u.mmap.fd, i->u.mmap.offset);
@ -384,7 +395,7 @@ int snd_pcm_munmap(snd_pcm_t *pcm)
size = s; size = s;
} }
size = (size + 7) / 8; size = (size + 7) / 8;
size = PAGE_ALIGN(size); size = page_align(size);
switch (i->type) { switch (i->type) {
case SND_PCM_AREA_MMAP: case SND_PCM_AREA_MMAP:
#if 0 #if 0

View file

@ -25,7 +25,6 @@
#include <unistd.h> #include <unistd.h>
#include <string.h> #include <string.h>
#include <dlfcn.h> #include <dlfcn.h>
#include <asm/page.h>
#include "rawmidi_local.h" #include "rawmidi_local.h"
const char *snd_rawmidi_name(snd_rawmidi_t *rawmidi) const char *snd_rawmidi_name(snd_rawmidi_t *rawmidi)
@ -160,7 +159,7 @@ int snd_rawmidi_params_default(snd_rawmidi_t *rmidi, snd_rawmidi_params_t *param
{ {
assert(rmidi); assert(rmidi);
assert(params); assert(params);
params->buffer_size = PAGE_SIZE; params->buffer_size = page_size();
params->avail_min = 1; params->avail_min = 1;
params->no_active_sensing = 0; params->no_active_sensing = 0;
return 0; return 0;