Merge branch 'topic/ctxfi' into for-linus

* topic/ctxfi:
  ALSA: ctxfi - Simple code clean up
  ALSA: ctxfi - Native timer support for emu20k2
This commit is contained in:
Takashi Iwai 2009-09-10 15:32:48 +02:00
commit 6c5cb93b1e
11 changed files with 155 additions and 110 deletions

View file

@ -11,9 +11,12 @@
/* Timer Registers */ /* Timer Registers */
#define TIMER_TIMR 0x1B7004 #define WC 0x1b7000
#define INTERRUPT_GIP 0x1B7010 #define TIMR 0x1b7004
#define INTERRUPT_GIE 0x1B7014 # define TIMR_IE (1<<15)
# define TIMR_IP (1<<14)
#define GIP 0x1b7010
#define GIE 0x1b7014
/* I2C Registers */ /* I2C Registers */
#define I2C_IF_ADDRESS 0x1B9000 #define I2C_IF_ADDRESS 0x1B9000

View file

@ -63,7 +63,7 @@ static int amixer_set_input(struct amixer *amixer, struct rsc *rsc)
hw = amixer->rsc.hw; hw = amixer->rsc.hw;
hw->amixer_set_mode(amixer->rsc.ctrl_blk, AMIXER_Y_IMMEDIATE); hw->amixer_set_mode(amixer->rsc.ctrl_blk, AMIXER_Y_IMMEDIATE);
amixer->input = rsc; amixer->input = rsc;
if (NULL == rsc) if (!rsc)
hw->amixer_set_x(amixer->rsc.ctrl_blk, BLANK_SLOT); hw->amixer_set_x(amixer->rsc.ctrl_blk, BLANK_SLOT);
else else
hw->amixer_set_x(amixer->rsc.ctrl_blk, hw->amixer_set_x(amixer->rsc.ctrl_blk,
@ -99,7 +99,7 @@ static int amixer_set_sum(struct amixer *amixer, struct sum *sum)
hw = amixer->rsc.hw; hw = amixer->rsc.hw;
amixer->sum = sum; amixer->sum = sum;
if (NULL == sum) { if (!sum) {
hw->amixer_set_se(amixer->rsc.ctrl_blk, 0); hw->amixer_set_se(amixer->rsc.ctrl_blk, 0);
} else { } else {
hw->amixer_set_se(amixer->rsc.ctrl_blk, 1); hw->amixer_set_se(amixer->rsc.ctrl_blk, 1);
@ -124,20 +124,20 @@ static int amixer_commit_write(struct amixer *amixer)
/* Program master and conjugate resources */ /* Program master and conjugate resources */
amixer->rsc.ops->master(&amixer->rsc); amixer->rsc.ops->master(&amixer->rsc);
if (NULL != input) if (input)
input->ops->master(input); input->ops->master(input);
if (NULL != sum) if (sum)
sum->rsc.ops->master(&sum->rsc); sum->rsc.ops->master(&sum->rsc);
for (i = 0; i < amixer->rsc.msr; i++) { for (i = 0; i < amixer->rsc.msr; i++) {
hw->amixer_set_dirty_all(amixer->rsc.ctrl_blk); hw->amixer_set_dirty_all(amixer->rsc.ctrl_blk);
if (NULL != input) { if (input) {
hw->amixer_set_x(amixer->rsc.ctrl_blk, hw->amixer_set_x(amixer->rsc.ctrl_blk,
input->ops->output_slot(input)); input->ops->output_slot(input));
input->ops->next_conj(input); input->ops->next_conj(input);
} }
if (NULL != sum) { if (sum) {
hw->amixer_set_sadr(amixer->rsc.ctrl_blk, hw->amixer_set_sadr(amixer->rsc.ctrl_blk,
sum->rsc.ops->index(&sum->rsc)); sum->rsc.ops->index(&sum->rsc));
sum->rsc.ops->next_conj(&sum->rsc); sum->rsc.ops->next_conj(&sum->rsc);
@ -147,10 +147,10 @@ static int amixer_commit_write(struct amixer *amixer)
amixer->rsc.ops->next_conj(&amixer->rsc); amixer->rsc.ops->next_conj(&amixer->rsc);
} }
amixer->rsc.ops->master(&amixer->rsc); amixer->rsc.ops->master(&amixer->rsc);
if (NULL != input) if (input)
input->ops->master(input); input->ops->master(input);
if (NULL != sum) if (sum)
sum->rsc.ops->master(&sum->rsc); sum->rsc.ops->master(&sum->rsc);
return 0; return 0;
@ -303,7 +303,7 @@ int amixer_mgr_create(void *hw, struct amixer_mgr **ramixer_mgr)
*ramixer_mgr = NULL; *ramixer_mgr = NULL;
amixer_mgr = kzalloc(sizeof(*amixer_mgr), GFP_KERNEL); amixer_mgr = kzalloc(sizeof(*amixer_mgr), GFP_KERNEL);
if (NULL == amixer_mgr) if (!amixer_mgr)
return -ENOMEM; return -ENOMEM;
err = rsc_mgr_init(&amixer_mgr->mgr, AMIXER, AMIXER_RESOURCE_NUM, hw); err = rsc_mgr_init(&amixer_mgr->mgr, AMIXER, AMIXER_RESOURCE_NUM, hw);
@ -456,7 +456,7 @@ int sum_mgr_create(void *hw, struct sum_mgr **rsum_mgr)
*rsum_mgr = NULL; *rsum_mgr = NULL;
sum_mgr = kzalloc(sizeof(*sum_mgr), GFP_KERNEL); sum_mgr = kzalloc(sizeof(*sum_mgr), GFP_KERNEL);
if (NULL == sum_mgr) if (!sum_mgr)
return -ENOMEM; return -ENOMEM;
err = rsc_mgr_init(&sum_mgr->mgr, SUM, SUM_RESOURCE_NUM, hw); err = rsc_mgr_init(&sum_mgr->mgr, SUM, SUM_RESOURCE_NUM, hw);

View file

@ -136,7 +136,7 @@ static int ct_map_audio_buffer(struct ct_atc *atc, struct ct_atc_pcm *apcm)
struct snd_pcm_runtime *runtime; struct snd_pcm_runtime *runtime;
struct ct_vm *vm; struct ct_vm *vm;
if (NULL == apcm->substream) if (!apcm->substream)
return 0; return 0;
runtime = apcm->substream->runtime; runtime = apcm->substream->runtime;
@ -144,7 +144,7 @@ static int ct_map_audio_buffer(struct ct_atc *atc, struct ct_atc_pcm *apcm)
apcm->vm_block = vm->map(vm, apcm->substream, runtime->dma_bytes); apcm->vm_block = vm->map(vm, apcm->substream, runtime->dma_bytes);
if (NULL == apcm->vm_block) if (!apcm->vm_block)
return -ENOENT; return -ENOENT;
return 0; return 0;
@ -154,7 +154,7 @@ static void ct_unmap_audio_buffer(struct ct_atc *atc, struct ct_atc_pcm *apcm)
{ {
struct ct_vm *vm; struct ct_vm *vm;
if (NULL == apcm->vm_block) if (!apcm->vm_block)
return; return;
vm = atc->vm; vm = atc->vm;
@ -231,16 +231,16 @@ atc_get_pitch(unsigned int input_rate, unsigned int output_rate)
static int select_rom(unsigned int pitch) static int select_rom(unsigned int pitch)
{ {
if ((pitch > 0x00428f5c) && (pitch < 0x01b851ec)) { if (pitch > 0x00428f5c && pitch < 0x01b851ec) {
/* 0.26 <= pitch <= 1.72 */ /* 0.26 <= pitch <= 1.72 */
return 1; return 1;
} else if ((0x01d66666 == pitch) || (0x01d66667 == pitch)) { } else if (pitch == 0x01d66666 || pitch == 0x01d66667) {
/* pitch == 1.8375 */ /* pitch == 1.8375 */
return 2; return 2;
} else if (0x02000000 == pitch) { } else if (pitch == 0x02000000) {
/* pitch == 2 */ /* pitch == 2 */
return 3; return 3;
} else if ((pitch >= 0x0) && (pitch <= 0x08000000)) { } else if (pitch >= 0x0 && pitch <= 0x08000000) {
/* 0 <= pitch <= 8 */ /* 0 <= pitch <= 8 */
return 0; return 0;
} else { } else {
@ -283,7 +283,7 @@ static int atc_pcm_playback_prepare(struct ct_atc *atc, struct ct_atc_pcm *apcm)
/* Get AMIXER resource */ /* Get AMIXER resource */
n_amixer = (n_amixer < 2) ? 2 : n_amixer; n_amixer = (n_amixer < 2) ? 2 : n_amixer;
apcm->amixers = kzalloc(sizeof(void *)*n_amixer, GFP_KERNEL); apcm->amixers = kzalloc(sizeof(void *)*n_amixer, GFP_KERNEL);
if (NULL == apcm->amixers) { if (!apcm->amixers) {
err = -ENOMEM; err = -ENOMEM;
goto error1; goto error1;
} }
@ -311,7 +311,7 @@ static int atc_pcm_playback_prepare(struct ct_atc *atc, struct ct_atc_pcm *apcm)
INIT_VOL, atc->pcm[i+device*2]); INIT_VOL, atc->pcm[i+device*2]);
mutex_unlock(&atc->atc_mutex); mutex_unlock(&atc->atc_mutex);
src = src->ops->next_interleave(src); src = src->ops->next_interleave(src);
if (NULL == src) if (!src)
src = apcm->src; src = apcm->src;
} }
@ -334,7 +334,7 @@ atc_pcm_release_resources(struct ct_atc *atc, struct ct_atc_pcm *apcm)
struct srcimp *srcimp; struct srcimp *srcimp;
int i; int i;
if (NULL != apcm->srcimps) { if (apcm->srcimps) {
for (i = 0; i < apcm->n_srcimp; i++) { for (i = 0; i < apcm->n_srcimp; i++) {
srcimp = apcm->srcimps[i]; srcimp = apcm->srcimps[i];
srcimp->ops->unmap(srcimp); srcimp->ops->unmap(srcimp);
@ -345,7 +345,7 @@ atc_pcm_release_resources(struct ct_atc *atc, struct ct_atc_pcm *apcm)
apcm->srcimps = NULL; apcm->srcimps = NULL;
} }
if (NULL != apcm->srccs) { if (apcm->srccs) {
for (i = 0; i < apcm->n_srcc; i++) { for (i = 0; i < apcm->n_srcc; i++) {
src_mgr->put_src(src_mgr, apcm->srccs[i]); src_mgr->put_src(src_mgr, apcm->srccs[i]);
apcm->srccs[i] = NULL; apcm->srccs[i] = NULL;
@ -354,7 +354,7 @@ atc_pcm_release_resources(struct ct_atc *atc, struct ct_atc_pcm *apcm)
apcm->srccs = NULL; apcm->srccs = NULL;
} }
if (NULL != apcm->amixers) { if (apcm->amixers) {
for (i = 0; i < apcm->n_amixer; i++) { for (i = 0; i < apcm->n_amixer; i++) {
amixer_mgr->put_amixer(amixer_mgr, apcm->amixers[i]); amixer_mgr->put_amixer(amixer_mgr, apcm->amixers[i]);
apcm->amixers[i] = NULL; apcm->amixers[i] = NULL;
@ -363,17 +363,17 @@ atc_pcm_release_resources(struct ct_atc *atc, struct ct_atc_pcm *apcm)
apcm->amixers = NULL; apcm->amixers = NULL;
} }
if (NULL != apcm->mono) { if (apcm->mono) {
sum_mgr->put_sum(sum_mgr, apcm->mono); sum_mgr->put_sum(sum_mgr, apcm->mono);
apcm->mono = NULL; apcm->mono = NULL;
} }
if (NULL != apcm->src) { if (apcm->src) {
src_mgr->put_src(src_mgr, apcm->src); src_mgr->put_src(src_mgr, apcm->src);
apcm->src = NULL; apcm->src = NULL;
} }
if (NULL != apcm->vm_block) { if (apcm->vm_block) {
/* Undo device virtual mem map */ /* Undo device virtual mem map */
ct_unmap_audio_buffer(atc, apcm); ct_unmap_audio_buffer(atc, apcm);
apcm->vm_block = NULL; apcm->vm_block = NULL;
@ -419,7 +419,7 @@ static int atc_pcm_stop(struct ct_atc *atc, struct ct_atc_pcm *apcm)
src->ops->set_state(src, SRC_STATE_OFF); src->ops->set_state(src, SRC_STATE_OFF);
src->ops->commit_write(src); src->ops->commit_write(src);
if (NULL != apcm->srccs) { if (apcm->srccs) {
for (i = 0; i < apcm->n_srcc; i++) { for (i = 0; i < apcm->n_srcc; i++) {
src = apcm->srccs[i]; src = apcm->srccs[i];
src->ops->set_bm(src, 0); src->ops->set_bm(src, 0);
@ -544,18 +544,18 @@ atc_pcm_capture_get_resources(struct ct_atc *atc, struct ct_atc_pcm *apcm)
if (n_srcc) { if (n_srcc) {
apcm->srccs = kzalloc(sizeof(void *)*n_srcc, GFP_KERNEL); apcm->srccs = kzalloc(sizeof(void *)*n_srcc, GFP_KERNEL);
if (NULL == apcm->srccs) if (!apcm->srccs)
return -ENOMEM; return -ENOMEM;
} }
if (n_amixer) { if (n_amixer) {
apcm->amixers = kzalloc(sizeof(void *)*n_amixer, GFP_KERNEL); apcm->amixers = kzalloc(sizeof(void *)*n_amixer, GFP_KERNEL);
if (NULL == apcm->amixers) { if (!apcm->amixers) {
err = -ENOMEM; err = -ENOMEM;
goto error1; goto error1;
} }
} }
apcm->srcimps = kzalloc(sizeof(void *)*n_srcimp, GFP_KERNEL); apcm->srcimps = kzalloc(sizeof(void *)*n_srcimp, GFP_KERNEL);
if (NULL == apcm->srcimps) { if (!apcm->srcimps) {
err = -ENOMEM; err = -ENOMEM;
goto error1; goto error1;
} }
@ -818,7 +818,7 @@ static int spdif_passthru_playback_get_resources(struct ct_atc *atc,
/* Get AMIXER resource */ /* Get AMIXER resource */
n_amixer = (n_amixer < 2) ? 2 : n_amixer; n_amixer = (n_amixer < 2) ? 2 : n_amixer;
apcm->amixers = kzalloc(sizeof(void *)*n_amixer, GFP_KERNEL); apcm->amixers = kzalloc(sizeof(void *)*n_amixer, GFP_KERNEL);
if (NULL == apcm->amixers) { if (!apcm->amixers) {
err = -ENOMEM; err = -ENOMEM;
goto error1; goto error1;
} }
@ -919,7 +919,7 @@ spdif_passthru_playback_prepare(struct ct_atc *atc, struct ct_atc_pcm *apcm)
amixer = apcm->amixers[i]; amixer = apcm->amixers[i];
amixer->ops->setup(amixer, &src->rsc, INIT_VOL, NULL); amixer->ops->setup(amixer, &src->rsc, INIT_VOL, NULL);
src = src->ops->next_interleave(src); src = src->ops->next_interleave(src);
if (NULL == src) if (!src)
src = apcm->src; src = apcm->src;
} }
/* Connect to SPDIFOO */ /* Connect to SPDIFOO */
@ -1121,7 +1121,7 @@ static int atc_release_resources(struct ct_atc *atc)
struct ct_mixer *mixer = NULL; struct ct_mixer *mixer = NULL;
/* disconnect internal mixer objects */ /* disconnect internal mixer objects */
if (NULL != atc->mixer) { if (atc->mixer) {
mixer = atc->mixer; mixer = atc->mixer;
mixer->set_input_left(mixer, MIX_LINE_IN, NULL); mixer->set_input_left(mixer, MIX_LINE_IN, NULL);
mixer->set_input_right(mixer, MIX_LINE_IN, NULL); mixer->set_input_right(mixer, MIX_LINE_IN, NULL);
@ -1131,7 +1131,7 @@ static int atc_release_resources(struct ct_atc *atc)
mixer->set_input_right(mixer, MIX_SPDIF_IN, NULL); mixer->set_input_right(mixer, MIX_SPDIF_IN, NULL);
} }
if (NULL != atc->daios) { if (atc->daios) {
daio_mgr = (struct daio_mgr *)atc->rsc_mgrs[DAIO]; daio_mgr = (struct daio_mgr *)atc->rsc_mgrs[DAIO];
for (i = 0; i < atc->n_daio; i++) { for (i = 0; i < atc->n_daio; i++) {
daio = atc->daios[i]; daio = atc->daios[i];
@ -1149,7 +1149,7 @@ static int atc_release_resources(struct ct_atc *atc)
atc->daios = NULL; atc->daios = NULL;
} }
if (NULL != atc->pcm) { if (atc->pcm) {
sum_mgr = atc->rsc_mgrs[SUM]; sum_mgr = atc->rsc_mgrs[SUM];
for (i = 0; i < atc->n_pcm; i++) for (i = 0; i < atc->n_pcm; i++)
sum_mgr->put_sum(sum_mgr, atc->pcm[i]); sum_mgr->put_sum(sum_mgr, atc->pcm[i]);
@ -1158,7 +1158,7 @@ static int atc_release_resources(struct ct_atc *atc)
atc->pcm = NULL; atc->pcm = NULL;
} }
if (NULL != atc->srcs) { if (atc->srcs) {
src_mgr = atc->rsc_mgrs[SRC]; src_mgr = atc->rsc_mgrs[SRC];
for (i = 0; i < atc->n_src; i++) for (i = 0; i < atc->n_src; i++)
src_mgr->put_src(src_mgr, atc->srcs[i]); src_mgr->put_src(src_mgr, atc->srcs[i]);
@ -1167,7 +1167,7 @@ static int atc_release_resources(struct ct_atc *atc)
atc->srcs = NULL; atc->srcs = NULL;
} }
if (NULL != atc->srcimps) { if (atc->srcimps) {
srcimp_mgr = atc->rsc_mgrs[SRCIMP]; srcimp_mgr = atc->rsc_mgrs[SRCIMP];
for (i = 0; i < atc->n_srcimp; i++) { for (i = 0; i < atc->n_srcimp; i++) {
srcimp = atc->srcimps[i]; srcimp = atc->srcimps[i];
@ -1185,7 +1185,7 @@ static int ct_atc_destroy(struct ct_atc *atc)
{ {
int i = 0; int i = 0;
if (NULL == atc) if (!atc)
return 0; return 0;
if (atc->timer) { if (atc->timer) {
@ -1196,21 +1196,20 @@ static int ct_atc_destroy(struct ct_atc *atc)
atc_release_resources(atc); atc_release_resources(atc);
/* Destroy internal mixer objects */ /* Destroy internal mixer objects */
if (NULL != atc->mixer) if (atc->mixer)
ct_mixer_destroy(atc->mixer); ct_mixer_destroy(atc->mixer);
for (i = 0; i < NUM_RSCTYP; i++) { for (i = 0; i < NUM_RSCTYP; i++) {
if ((NULL != rsc_mgr_funcs[i].destroy) && if (rsc_mgr_funcs[i].destroy && atc->rsc_mgrs[i])
(NULL != atc->rsc_mgrs[i]))
rsc_mgr_funcs[i].destroy(atc->rsc_mgrs[i]); rsc_mgr_funcs[i].destroy(atc->rsc_mgrs[i]);
} }
if (NULL != atc->hw) if (atc->hw)
destroy_hw_obj((struct hw *)atc->hw); destroy_hw_obj((struct hw *)atc->hw);
/* Destroy device virtual memory manager object */ /* Destroy device virtual memory manager object */
if (NULL != atc->vm) { if (atc->vm) {
ct_vm_destroy(atc->vm); ct_vm_destroy(atc->vm);
atc->vm = NULL; atc->vm = NULL;
} }
@ -1275,7 +1274,7 @@ int __devinit ct_atc_create_alsa_devs(struct ct_atc *atc)
alsa_dev_funcs[MIXER].public_name = atc->chip_name; alsa_dev_funcs[MIXER].public_name = atc->chip_name;
for (i = 0; i < NUM_CTALSADEVS; i++) { for (i = 0; i < NUM_CTALSADEVS; i++) {
if (NULL == alsa_dev_funcs[i].create) if (!alsa_dev_funcs[i].create)
continue; continue;
err = alsa_dev_funcs[i].create(atc, i, err = alsa_dev_funcs[i].create(atc, i,
@ -1312,7 +1311,7 @@ static int __devinit atc_create_hw_devs(struct ct_atc *atc)
return err; return err;
for (i = 0; i < NUM_RSCTYP; i++) { for (i = 0; i < NUM_RSCTYP; i++) {
if (NULL == rsc_mgr_funcs[i].create) if (!rsc_mgr_funcs[i].create)
continue; continue;
err = rsc_mgr_funcs[i].create(atc->hw, &atc->rsc_mgrs[i]); err = rsc_mgr_funcs[i].create(atc->hw, &atc->rsc_mgrs[i]);
@ -1339,19 +1338,19 @@ static int atc_get_resources(struct ct_atc *atc)
int err, i; int err, i;
atc->daios = kzalloc(sizeof(void *)*(DAIONUM), GFP_KERNEL); atc->daios = kzalloc(sizeof(void *)*(DAIONUM), GFP_KERNEL);
if (NULL == atc->daios) if (!atc->daios)
return -ENOMEM; return -ENOMEM;
atc->srcs = kzalloc(sizeof(void *)*(2*2), GFP_KERNEL); atc->srcs = kzalloc(sizeof(void *)*(2*2), GFP_KERNEL);
if (NULL == atc->srcs) if (!atc->srcs)
return -ENOMEM; return -ENOMEM;
atc->srcimps = kzalloc(sizeof(void *)*(2*2), GFP_KERNEL); atc->srcimps = kzalloc(sizeof(void *)*(2*2), GFP_KERNEL);
if (NULL == atc->srcimps) if (!atc->srcimps)
return -ENOMEM; return -ENOMEM;
atc->pcm = kzalloc(sizeof(void *)*(2*4), GFP_KERNEL); atc->pcm = kzalloc(sizeof(void *)*(2*4), GFP_KERNEL);
if (NULL == atc->pcm) if (!atc->pcm)
return -ENOMEM; return -ENOMEM;
daio_mgr = (struct daio_mgr *)atc->rsc_mgrs[DAIO]; daio_mgr = (struct daio_mgr *)atc->rsc_mgrs[DAIO];
@ -1648,7 +1647,7 @@ int __devinit ct_atc_create(struct snd_card *card, struct pci_dev *pci,
*ratc = NULL; *ratc = NULL;
atc = kzalloc(sizeof(*atc), GFP_KERNEL); atc = kzalloc(sizeof(*atc), GFP_KERNEL);
if (NULL == atc) if (!atc)
return -ENOMEM; return -ENOMEM;
/* Set operations */ /* Set operations */

View file

@ -173,7 +173,7 @@ static int dao_set_left_input(struct dao *dao, struct rsc *input)
int i; int i;
entry = kzalloc((sizeof(*entry) * daio->rscl.msr), GFP_KERNEL); entry = kzalloc((sizeof(*entry) * daio->rscl.msr), GFP_KERNEL);
if (NULL == entry) if (!entry)
return -ENOMEM; return -ENOMEM;
/* Program master and conjugate resources */ /* Program master and conjugate resources */
@ -201,7 +201,7 @@ static int dao_set_right_input(struct dao *dao, struct rsc *input)
int i; int i;
entry = kzalloc((sizeof(*entry) * daio->rscr.msr), GFP_KERNEL); entry = kzalloc((sizeof(*entry) * daio->rscr.msr), GFP_KERNEL);
if (NULL == entry) if (!entry)
return -ENOMEM; return -ENOMEM;
/* Program master and conjugate resources */ /* Program master and conjugate resources */
@ -228,7 +228,7 @@ static int dao_clear_left_input(struct dao *dao)
struct daio *daio = &dao->daio; struct daio *daio = &dao->daio;
int i; int i;
if (NULL == dao->imappers[0]) if (!dao->imappers[0])
return 0; return 0;
entry = dao->imappers[0]; entry = dao->imappers[0];
@ -252,7 +252,7 @@ static int dao_clear_right_input(struct dao *dao)
struct daio *daio = &dao->daio; struct daio *daio = &dao->daio;
int i; int i;
if (NULL == dao->imappers[daio->rscl.msr]) if (!dao->imappers[daio->rscl.msr])
return 0; return 0;
entry = dao->imappers[daio->rscl.msr]; entry = dao->imappers[daio->rscl.msr];
@ -408,7 +408,7 @@ static int dao_rsc_init(struct dao *dao,
return err; return err;
dao->imappers = kzalloc(sizeof(void *)*desc->msr*2, GFP_KERNEL); dao->imappers = kzalloc(sizeof(void *)*desc->msr*2, GFP_KERNEL);
if (NULL == dao->imappers) { if (!dao->imappers) {
err = -ENOMEM; err = -ENOMEM;
goto error1; goto error1;
} }
@ -442,11 +442,11 @@ error1:
static int dao_rsc_uninit(struct dao *dao) static int dao_rsc_uninit(struct dao *dao)
{ {
if (NULL != dao->imappers) { if (dao->imappers) {
if (NULL != dao->imappers[0]) if (dao->imappers[0])
dao_clear_left_input(dao); dao_clear_left_input(dao);
if (NULL != dao->imappers[dao->daio.rscl.msr]) if (dao->imappers[dao->daio.rscl.msr])
dao_clear_right_input(dao); dao_clear_right_input(dao);
kfree(dao->imappers); kfree(dao->imappers);
@ -555,7 +555,7 @@ static int get_daio_rsc(struct daio_mgr *mgr,
/* Allocate mem for daio resource */ /* Allocate mem for daio resource */
if (desc->type <= DAIO_OUT_MAX) { if (desc->type <= DAIO_OUT_MAX) {
dao = kzalloc(sizeof(*dao), GFP_KERNEL); dao = kzalloc(sizeof(*dao), GFP_KERNEL);
if (NULL == dao) { if (!dao) {
err = -ENOMEM; err = -ENOMEM;
goto error; goto error;
} }
@ -566,7 +566,7 @@ static int get_daio_rsc(struct daio_mgr *mgr,
*rdaio = &dao->daio; *rdaio = &dao->daio;
} else { } else {
dai = kzalloc(sizeof(*dai), GFP_KERNEL); dai = kzalloc(sizeof(*dai), GFP_KERNEL);
if (NULL == dai) { if (!dai) {
err = -ENOMEM; err = -ENOMEM;
goto error; goto error;
} }
@ -583,9 +583,9 @@ static int get_daio_rsc(struct daio_mgr *mgr,
return 0; return 0;
error: error:
if (NULL != dao) if (dao)
kfree(dao); kfree(dao);
else if (NULL != dai) else if (dai)
kfree(dai); kfree(dai);
spin_lock_irqsave(&mgr->mgr_lock, flags); spin_lock_irqsave(&mgr->mgr_lock, flags);
@ -663,7 +663,7 @@ static int daio_imap_add(struct daio_mgr *mgr, struct imapper *entry)
int err; int err;
spin_lock_irqsave(&mgr->imap_lock, flags); spin_lock_irqsave(&mgr->imap_lock, flags);
if ((0 == entry->addr) && (mgr->init_imap_added)) { if (!entry->addr && mgr->init_imap_added) {
input_mapper_delete(&mgr->imappers, mgr->init_imap, input_mapper_delete(&mgr->imappers, mgr->init_imap,
daio_map_op, mgr); daio_map_op, mgr);
mgr->init_imap_added = 0; mgr->init_imap_added = 0;
@ -707,7 +707,7 @@ int daio_mgr_create(void *hw, struct daio_mgr **rdaio_mgr)
*rdaio_mgr = NULL; *rdaio_mgr = NULL;
daio_mgr = kzalloc(sizeof(*daio_mgr), GFP_KERNEL); daio_mgr = kzalloc(sizeof(*daio_mgr), GFP_KERNEL);
if (NULL == daio_mgr) if (!daio_mgr)
return -ENOMEM; return -ENOMEM;
err = rsc_mgr_init(&daio_mgr->mgr, DAIO, DAIO_RESOURCE_NUM, hw); err = rsc_mgr_init(&daio_mgr->mgr, DAIO, DAIO_RESOURCE_NUM, hw);
@ -718,7 +718,7 @@ int daio_mgr_create(void *hw, struct daio_mgr **rdaio_mgr)
spin_lock_init(&daio_mgr->imap_lock); spin_lock_init(&daio_mgr->imap_lock);
INIT_LIST_HEAD(&daio_mgr->imappers); INIT_LIST_HEAD(&daio_mgr->imappers);
entry = kzalloc(sizeof(*entry), GFP_KERNEL); entry = kzalloc(sizeof(*entry), GFP_KERNEL);
if (NULL == entry) { if (!entry) {
err = -ENOMEM; err = -ENOMEM;
goto error2; goto error2;
} }

View file

@ -168,7 +168,7 @@ static int src_get_rsc_ctrl_blk(void **rblk)
*rblk = NULL; *rblk = NULL;
blk = kzalloc(sizeof(*blk), GFP_KERNEL); blk = kzalloc(sizeof(*blk), GFP_KERNEL);
if (NULL == blk) if (!blk)
return -ENOMEM; return -ENOMEM;
*rblk = blk; *rblk = blk;
@ -494,7 +494,7 @@ static int src_mgr_get_ctrl_blk(void **rblk)
*rblk = NULL; *rblk = NULL;
blk = kzalloc(sizeof(*blk), GFP_KERNEL); blk = kzalloc(sizeof(*blk), GFP_KERNEL);
if (NULL == blk) if (!blk)
return -ENOMEM; return -ENOMEM;
*rblk = blk; *rblk = blk;
@ -515,7 +515,7 @@ static int srcimp_mgr_get_ctrl_blk(void **rblk)
*rblk = NULL; *rblk = NULL;
blk = kzalloc(sizeof(*blk), GFP_KERNEL); blk = kzalloc(sizeof(*blk), GFP_KERNEL);
if (NULL == blk) if (!blk)
return -ENOMEM; return -ENOMEM;
*rblk = blk; *rblk = blk;
@ -702,7 +702,7 @@ static int amixer_rsc_get_ctrl_blk(void **rblk)
*rblk = NULL; *rblk = NULL;
blk = kzalloc(sizeof(*blk), GFP_KERNEL); blk = kzalloc(sizeof(*blk), GFP_KERNEL);
if (NULL == blk) if (!blk)
return -ENOMEM; return -ENOMEM;
*rblk = blk; *rblk = blk;
@ -723,7 +723,7 @@ static int amixer_mgr_get_ctrl_blk(void **rblk)
*rblk = NULL; *rblk = NULL;
/*blk = kzalloc(sizeof(*blk), GFP_KERNEL); /*blk = kzalloc(sizeof(*blk), GFP_KERNEL);
if (NULL == blk) if (!blk)
return -ENOMEM; return -ENOMEM;
*rblk = blk;*/ *rblk = blk;*/
@ -909,7 +909,7 @@ static int dai_get_ctrl_blk(void **rblk)
*rblk = NULL; *rblk = NULL;
blk = kzalloc(sizeof(*blk), GFP_KERNEL); blk = kzalloc(sizeof(*blk), GFP_KERNEL);
if (NULL == blk) if (!blk)
return -ENOMEM; return -ENOMEM;
*rblk = blk; *rblk = blk;
@ -958,7 +958,7 @@ static int dao_get_ctrl_blk(void **rblk)
*rblk = NULL; *rblk = NULL;
blk = kzalloc(sizeof(*blk), GFP_KERNEL); blk = kzalloc(sizeof(*blk), GFP_KERNEL);
if (NULL == blk) if (!blk)
return -ENOMEM; return -ENOMEM;
*rblk = blk; *rblk = blk;
@ -1152,7 +1152,7 @@ static int daio_mgr_get_ctrl_blk(struct hw *hw, void **rblk)
*rblk = NULL; *rblk = NULL;
blk = kzalloc(sizeof(*blk), GFP_KERNEL); blk = kzalloc(sizeof(*blk), GFP_KERNEL);
if (NULL == blk) if (!blk)
return -ENOMEM; return -ENOMEM;
blk->i2sctl = hw_read_20kx(hw, I2SCTL); blk->i2sctl = hw_read_20kx(hw, I2SCTL);
@ -1808,7 +1808,7 @@ static int uaa_to_xfi(struct pci_dev *pci)
/* By default, Hendrix card UAA Bar0 should be using memory... */ /* By default, Hendrix card UAA Bar0 should be using memory... */
io_base = pci_resource_start(pci, 0); io_base = pci_resource_start(pci, 0);
mem_base = ioremap(io_base, pci_resource_len(pci, 0)); mem_base = ioremap(io_base, pci_resource_len(pci, 0));
if (NULL == mem_base) if (!mem_base)
return -ENOENT; return -ENOENT;
/* Read current mode from Mode Change Register */ /* Read current mode from Mode Change Register */
@ -1977,7 +1977,7 @@ static int hw_card_shutdown(struct hw *hw)
hw->irq = -1; hw->irq = -1;
if (NULL != ((void *)hw->mem_base)) if (hw->mem_base)
iounmap((void *)hw->mem_base); iounmap((void *)hw->mem_base);
hw->mem_base = (unsigned long)NULL; hw->mem_base = (unsigned long)NULL;
@ -2274,7 +2274,7 @@ int __devinit create_20k1_hw_obj(struct hw **rhw)
*rhw = NULL; *rhw = NULL;
hw20k1 = kzalloc(sizeof(*hw20k1), GFP_KERNEL); hw20k1 = kzalloc(sizeof(*hw20k1), GFP_KERNEL);
if (NULL == hw20k1) if (!hw20k1)
return -ENOMEM; return -ENOMEM;
spin_lock_init(&hw20k1->reg_20k1_lock); spin_lock_init(&hw20k1->reg_20k1_lock);

View file

@ -166,7 +166,7 @@ static int src_get_rsc_ctrl_blk(void **rblk)
*rblk = NULL; *rblk = NULL;
blk = kzalloc(sizeof(*blk), GFP_KERNEL); blk = kzalloc(sizeof(*blk), GFP_KERNEL);
if (NULL == blk) if (!blk)
return -ENOMEM; return -ENOMEM;
*rblk = blk; *rblk = blk;
@ -492,7 +492,7 @@ static int src_mgr_get_ctrl_blk(void **rblk)
*rblk = NULL; *rblk = NULL;
blk = kzalloc(sizeof(*blk), GFP_KERNEL); blk = kzalloc(sizeof(*blk), GFP_KERNEL);
if (NULL == blk) if (!blk)
return -ENOMEM; return -ENOMEM;
*rblk = blk; *rblk = blk;
@ -513,7 +513,7 @@ static int srcimp_mgr_get_ctrl_blk(void **rblk)
*rblk = NULL; *rblk = NULL;
blk = kzalloc(sizeof(*blk), GFP_KERNEL); blk = kzalloc(sizeof(*blk), GFP_KERNEL);
if (NULL == blk) if (!blk)
return -ENOMEM; return -ENOMEM;
*rblk = blk; *rblk = blk;
@ -702,7 +702,7 @@ static int amixer_rsc_get_ctrl_blk(void **rblk)
*rblk = NULL; *rblk = NULL;
blk = kzalloc(sizeof(*blk), GFP_KERNEL); blk = kzalloc(sizeof(*blk), GFP_KERNEL);
if (NULL == blk) if (!blk)
return -ENOMEM; return -ENOMEM;
*rblk = blk; *rblk = blk;
@ -891,7 +891,7 @@ static int dai_get_ctrl_blk(void **rblk)
*rblk = NULL; *rblk = NULL;
blk = kzalloc(sizeof(*blk), GFP_KERNEL); blk = kzalloc(sizeof(*blk), GFP_KERNEL);
if (NULL == blk) if (!blk)
return -ENOMEM; return -ENOMEM;
*rblk = blk; *rblk = blk;
@ -941,7 +941,7 @@ static int dao_get_ctrl_blk(void **rblk)
*rblk = NULL; *rblk = NULL;
blk = kzalloc(sizeof(*blk), GFP_KERNEL); blk = kzalloc(sizeof(*blk), GFP_KERNEL);
if (NULL == blk) if (!blk)
return -ENOMEM; return -ENOMEM;
*rblk = blk; *rblk = blk;
@ -1092,7 +1092,7 @@ static int daio_mgr_get_ctrl_blk(struct hw *hw, void **rblk)
*rblk = NULL; *rblk = NULL;
blk = kzalloc(sizeof(*blk), GFP_KERNEL); blk = kzalloc(sizeof(*blk), GFP_KERNEL);
if (NULL == blk) if (!blk)
return -ENOMEM; return -ENOMEM;
for (i = 0; i < 8; i++) { for (i = 0; i < 8; i++) {
@ -1112,6 +1112,26 @@ static int daio_mgr_put_ctrl_blk(void *blk)
return 0; return 0;
} }
/* Timer interrupt */
static int set_timer_irq(struct hw *hw, int enable)
{
hw_write_20kx(hw, GIE, enable ? IT_INT : 0);
return 0;
}
static int set_timer_tick(struct hw *hw, unsigned int ticks)
{
if (ticks)
ticks |= TIMR_IE | TIMR_IP;
hw_write_20kx(hw, TIMR, ticks);
return 0;
}
static unsigned int get_wc(struct hw *hw)
{
return hw_read_20kx(hw, WC);
}
/* Card hardware initialization block */ /* Card hardware initialization block */
struct dac_conf { struct dac_conf {
unsigned int msr; /* master sample rate in rsrs */ unsigned int msr; /* master sample rate in rsrs */
@ -1841,6 +1861,22 @@ static int hw_have_digit_io_switch(struct hw *hw)
return 0; return 0;
} }
static irqreturn_t ct_20k2_interrupt(int irq, void *dev_id)
{
struct hw *hw = dev_id;
unsigned int status;
status = hw_read_20kx(hw, GIP);
if (!status)
return IRQ_NONE;
if (hw->irq_callback)
hw->irq_callback(hw->irq_callback_data, status);
hw_write_20kx(hw, GIP, status);
return IRQ_HANDLED;
}
static int hw_card_start(struct hw *hw) static int hw_card_start(struct hw *hw)
{ {
int err = 0; int err = 0;
@ -1868,7 +1904,7 @@ static int hw_card_start(struct hw *hw)
hw->io_base = pci_resource_start(hw->pci, 2); hw->io_base = pci_resource_start(hw->pci, 2);
hw->mem_base = (unsigned long)ioremap(hw->io_base, hw->mem_base = (unsigned long)ioremap(hw->io_base,
pci_resource_len(hw->pci, 2)); pci_resource_len(hw->pci, 2));
if (NULL == (void *)hw->mem_base) { if (!hw->mem_base) {
err = -ENOENT; err = -ENOENT;
goto error2; goto error2;
} }
@ -1879,12 +1915,15 @@ static int hw_card_start(struct hw *hw)
set_field(&gctl, GCTL_UAA, 0); set_field(&gctl, GCTL_UAA, 0);
hw_write_20kx(hw, GLOBAL_CNTL_GCTL, gctl); hw_write_20kx(hw, GLOBAL_CNTL_GCTL, gctl);
/*if ((err = request_irq(pci->irq, ct_atc_interrupt, IRQF_SHARED, if (hw->irq < 0) {
atc->chip_details->nm_card, hw))) { err = request_irq(pci->irq, ct_20k2_interrupt, IRQF_SHARED,
goto error3; "ctxfi", hw);
if (err < 0) {
printk(KERN_ERR "XFi: Cannot get irq %d\n", pci->irq);
goto error2;
} }
hw->irq = pci->irq; hw->irq = pci->irq;
*/ }
pci_set_master(pci); pci_set_master(pci);
@ -1923,7 +1962,7 @@ static int hw_card_shutdown(struct hw *hw)
hw->irq = -1; hw->irq = -1;
if (NULL != ((void *)hw->mem_base)) if (hw->mem_base)
iounmap((void *)hw->mem_base); iounmap((void *)hw->mem_base);
hw->mem_base = (unsigned long)NULL; hw->mem_base = (unsigned long)NULL;
@ -1972,7 +2011,7 @@ static int hw_card_init(struct hw *hw, struct card_conf *info)
hw_write_20kx(hw, GLOBAL_CNTL_GCTL, gctl); hw_write_20kx(hw, GLOBAL_CNTL_GCTL, gctl);
/* Reset all global pending interrupts */ /* Reset all global pending interrupts */
hw_write_20kx(hw, INTERRUPT_GIE, 0); hw_write_20kx(hw, GIE, 0);
/* Reset all SRC pending interrupts */ /* Reset all SRC pending interrupts */
hw_write_20kx(hw, SRC_IP, 0); hw_write_20kx(hw, SRC_IP, 0);
@ -2149,6 +2188,10 @@ static struct hw ct20k2_preset __devinitdata = {
.daio_mgr_set_imapnxt = daio_mgr_set_imapnxt, .daio_mgr_set_imapnxt = daio_mgr_set_imapnxt,
.daio_mgr_set_imapaddr = daio_mgr_set_imapaddr, .daio_mgr_set_imapaddr = daio_mgr_set_imapaddr,
.daio_mgr_commit_write = daio_mgr_commit_write, .daio_mgr_commit_write = daio_mgr_commit_write,
.set_timer_irq = set_timer_irq,
.set_timer_tick = set_timer_tick,
.get_wc = get_wc,
}; };
int __devinit create_20k2_hw_obj(struct hw **rhw) int __devinit create_20k2_hw_obj(struct hw **rhw)

View file

@ -654,7 +654,7 @@ ct_mixer_kcontrol_new(struct ct_mixer *mixer, struct snd_kcontrol_new *new)
int err; int err;
kctl = snd_ctl_new1(new, mixer->atc); kctl = snd_ctl_new1(new, mixer->atc);
if (NULL == kctl) if (!kctl)
return -ENOMEM; return -ENOMEM;
if (SNDRV_CTL_ELEM_IFACE_PCM == kctl->id.iface) if (SNDRV_CTL_ELEM_IFACE_PCM == kctl->id.iface)
@ -837,17 +837,17 @@ static int ct_mixer_get_mem(struct ct_mixer **rmixer)
*rmixer = NULL; *rmixer = NULL;
/* Allocate mem for mixer obj */ /* Allocate mem for mixer obj */
mixer = kzalloc(sizeof(*mixer), GFP_KERNEL); mixer = kzalloc(sizeof(*mixer), GFP_KERNEL);
if (NULL == mixer) if (!mixer)
return -ENOMEM; return -ENOMEM;
mixer->amixers = kzalloc(sizeof(void *)*(NUM_CT_AMIXERS*CHN_NUM), mixer->amixers = kzalloc(sizeof(void *)*(NUM_CT_AMIXERS*CHN_NUM),
GFP_KERNEL); GFP_KERNEL);
if (NULL == mixer->amixers) { if (!mixer->amixers) {
err = -ENOMEM; err = -ENOMEM;
goto error1; goto error1;
} }
mixer->sums = kzalloc(sizeof(void *)*(NUM_CT_SUMS*CHN_NUM), GFP_KERNEL); mixer->sums = kzalloc(sizeof(void *)*(NUM_CT_SUMS*CHN_NUM), GFP_KERNEL);
if (NULL == mixer->sums) { if (!mixer->sums) {
err = -ENOMEM; err = -ENOMEM;
goto error2; goto error2;
} }

View file

@ -97,7 +97,7 @@ static void ct_atc_pcm_interrupt(struct ct_atc_pcm *atc_pcm)
{ {
struct ct_atc_pcm *apcm = atc_pcm; struct ct_atc_pcm *apcm = atc_pcm;
if (NULL == apcm->substream) if (!apcm->substream)
return; return;
snd_pcm_period_elapsed(apcm->substream); snd_pcm_period_elapsed(apcm->substream);
@ -123,7 +123,7 @@ static int ct_pcm_playback_open(struct snd_pcm_substream *substream)
int err; int err;
apcm = kzalloc(sizeof(*apcm), GFP_KERNEL); apcm = kzalloc(sizeof(*apcm), GFP_KERNEL);
if (NULL == apcm) if (!apcm)
return -ENOMEM; return -ENOMEM;
apcm->substream = substream; apcm->substream = substream;
@ -271,7 +271,7 @@ static int ct_pcm_capture_open(struct snd_pcm_substream *substream)
int err; int err;
apcm = kzalloc(sizeof(*apcm), GFP_KERNEL); apcm = kzalloc(sizeof(*apcm), GFP_KERNEL);
if (NULL == apcm) if (!apcm)
return -ENOMEM; return -ENOMEM;
apcm->started = 0; apcm->started = 0;

View file

@ -144,7 +144,7 @@ int rsc_init(struct rsc *rsc, u32 idx, enum RSCTYP type, u32 msr, void *hw)
rsc->msr = msr; rsc->msr = msr;
rsc->hw = hw; rsc->hw = hw;
rsc->ops = &rsc_generic_ops; rsc->ops = &rsc_generic_ops;
if (NULL == hw) { if (!hw) {
rsc->ctrl_blk = NULL; rsc->ctrl_blk = NULL;
return 0; return 0;
} }
@ -216,7 +216,7 @@ int rsc_mgr_init(struct rsc_mgr *mgr, enum RSCTYP type,
mgr->type = NUM_RSCTYP; mgr->type = NUM_RSCTYP;
mgr->rscs = kzalloc(((amount + 8 - 1) / 8), GFP_KERNEL); mgr->rscs = kzalloc(((amount + 8 - 1) / 8), GFP_KERNEL);
if (NULL == mgr->rscs) if (!mgr->rscs)
return -ENOMEM; return -ENOMEM;
switch (type) { switch (type) {

View file

@ -441,7 +441,7 @@ get_src_rsc(struct src_mgr *mgr, const struct src_desc *desc, struct src **rsrc)
else else
src = kzalloc(sizeof(*src), GFP_KERNEL); src = kzalloc(sizeof(*src), GFP_KERNEL);
if (NULL == src) { if (!src) {
err = -ENOMEM; err = -ENOMEM;
goto error1; goto error1;
} }
@ -550,7 +550,7 @@ int src_mgr_create(void *hw, struct src_mgr **rsrc_mgr)
*rsrc_mgr = NULL; *rsrc_mgr = NULL;
src_mgr = kzalloc(sizeof(*src_mgr), GFP_KERNEL); src_mgr = kzalloc(sizeof(*src_mgr), GFP_KERNEL);
if (NULL == src_mgr) if (!src_mgr)
return -ENOMEM; return -ENOMEM;
err = rsc_mgr_init(&src_mgr->mgr, SRC, SRC_RESOURCE_NUM, hw); err = rsc_mgr_init(&src_mgr->mgr, SRC, SRC_RESOURCE_NUM, hw);
@ -679,7 +679,7 @@ static int srcimp_rsc_init(struct srcimp *srcimp,
/* Reserve memory for imapper nodes */ /* Reserve memory for imapper nodes */
srcimp->imappers = kzalloc(sizeof(struct imapper)*desc->msr, srcimp->imappers = kzalloc(sizeof(struct imapper)*desc->msr,
GFP_KERNEL); GFP_KERNEL);
if (NULL == srcimp->imappers) { if (!srcimp->imappers) {
err = -ENOMEM; err = -ENOMEM;
goto error1; goto error1;
} }
@ -833,7 +833,7 @@ int srcimp_mgr_create(void *hw, struct srcimp_mgr **rsrcimp_mgr)
*rsrcimp_mgr = NULL; *rsrcimp_mgr = NULL;
srcimp_mgr = kzalloc(sizeof(*srcimp_mgr), GFP_KERNEL); srcimp_mgr = kzalloc(sizeof(*srcimp_mgr), GFP_KERNEL);
if (NULL == srcimp_mgr) if (!srcimp_mgr)
return -ENOMEM; return -ENOMEM;
err = rsc_mgr_init(&srcimp_mgr->mgr, SRCIMP, SRCIMP_RESOURCE_NUM, hw); err = rsc_mgr_init(&srcimp_mgr->mgr, SRCIMP, SRCIMP_RESOURCE_NUM, hw);
@ -844,7 +844,7 @@ int srcimp_mgr_create(void *hw, struct srcimp_mgr **rsrcimp_mgr)
spin_lock_init(&srcimp_mgr->imap_lock); spin_lock_init(&srcimp_mgr->imap_lock);
INIT_LIST_HEAD(&srcimp_mgr->imappers); INIT_LIST_HEAD(&srcimp_mgr->imappers);
entry = kzalloc(sizeof(*entry), GFP_KERNEL); entry = kzalloc(sizeof(*entry), GFP_KERNEL);
if (NULL == entry) { if (!entry) {
err = -ENOMEM; err = -ENOMEM;
goto error2; goto error2;
} }

View file

@ -60,7 +60,7 @@ get_vm_block(struct ct_vm *vm, unsigned int size)
} }
block = kzalloc(sizeof(*block), GFP_KERNEL); block = kzalloc(sizeof(*block), GFP_KERNEL);
if (NULL == block) if (!block)
goto out; goto out;
block->addr = entry->addr; block->addr = entry->addr;
@ -181,7 +181,7 @@ int ct_vm_create(struct ct_vm **rvm)
*rvm = NULL; *rvm = NULL;
vm = kzalloc(sizeof(*vm), GFP_KERNEL); vm = kzalloc(sizeof(*vm), GFP_KERNEL);
if (NULL == vm) if (!vm)
return -ENOMEM; return -ENOMEM;
mutex_init(&vm->lock); mutex_init(&vm->lock);
@ -189,7 +189,7 @@ int ct_vm_create(struct ct_vm **rvm)
/* Allocate page table pages */ /* Allocate page table pages */
for (i = 0; i < CT_PTP_NUM; i++) { for (i = 0; i < CT_PTP_NUM; i++) {
vm->ptp[i] = kmalloc(PAGE_SIZE, GFP_KERNEL); vm->ptp[i] = kmalloc(PAGE_SIZE, GFP_KERNEL);
if (NULL == vm->ptp[i]) if (!vm->ptp[i])
break; break;
} }
if (!i) { if (!i) {