Lines Matching refs:user

346 	struct atmel_pmecc_user *user;
354 size = sizeof(*user);
365 user = kzalloc(size, GFP_KERNEL);
366 if (!user)
369 user->pmecc = pmecc;
371 user->partial_syn = (s16 *)PTR_ALIGN(user + 1, sizeof(u16));
372 user->si = user->partial_syn + ((2 * req->ecc.strength) + 1);
373 user->lmu = user->si + ((2 * req->ecc.strength) + 1);
374 user->smu = user->lmu + (req->ecc.strength + 1);
375 user->mu = (s32 *)PTR_ALIGN(user->smu +
379 user->dmu = user->mu + req->ecc.strength + 1;
380 user->delta = user->dmu + req->ecc.strength + 1;
384 kfree(user);
388 user->gf_tables = gf_tables;
390 user->eccbytes = req->ecc.bytes / req->ecc.nsectors;
397 user->cache.cfg = PMECC_CFG_BCH_STRENGTH(strength) |
401 user->cache.cfg |= PMECC_CFG_SECTOR1024;
403 user->cache.sarea = req->oobsize - 1;
404 user->cache.saddr = req->ecc.ooboffset;
405 user->cache.eaddr = req->ecc.ooboffset + req->ecc.bytes - 1;
407 return user;
411 void atmel_pmecc_destroy_user(struct atmel_pmecc_user *user)
413 kfree(user);
417 static int get_strength(struct atmel_pmecc_user *user)
419 const int *strengths = user->pmecc->caps->strengths;
421 return strengths[user->cache.cfg & PMECC_CFG_BCH_STRENGTH_MASK];
424 static int get_sectorsize(struct atmel_pmecc_user *user)
426 return user->cache.cfg & PMECC_CFG_SECTOR1024 ? 1024 : 512;
429 static void atmel_pmecc_gen_syndrome(struct atmel_pmecc_user *user, int sector)
431 int strength = get_strength(user);
437 value = readl_relaxed(user->pmecc->regs.base +
442 user->partial_syn[(2 * i) + 1] = value;
446 static void atmel_pmecc_substitute(struct atmel_pmecc_user *user)
448 int degree = get_sectorsize(user) == 512 ? 13 : 14;
450 int strength = get_strength(user);
451 s16 *alpha_to = user->gf_tables->alpha_to;
452 s16 *index_of = user->gf_tables->index_of;
453 s16 *partial_syn = user->partial_syn;
461 si = user->si;
487 static void atmel_pmecc_get_sigma(struct atmel_pmecc_user *user)
489 s16 *lmu = user->lmu;
490 s16 *si = user->si;
491 s32 *mu = user->mu;
492 s32 *dmu = user->dmu;
493 s32 *delta = user->delta;
494 int degree = get_sectorsize(user) == 512 ? 13 : 14;
496 int strength = get_strength(user);
498 s16 *index_of = user->gf_tables->index_of;
499 s16 *alpha_to = user->gf_tables->alpha_to;
502 s16 *smu = user->smu;
641 static int atmel_pmecc_err_location(struct atmel_pmecc_user *user)
643 int sector_size = get_sectorsize(user);
645 struct atmel_pmecc *pmecc = user->pmecc;
646 int strength = get_strength(user);
649 s16 *smu = user->smu;
654 for (i = 0; i <= user->lmu[strength + 1] >> 1; i++) {
680 if (roots_nbr == user->lmu[strength + 1] >> 1)
690 int atmel_pmecc_correct_sector(struct atmel_pmecc_user *user, int sector,
693 struct atmel_pmecc *pmecc = user->pmecc;
694 int sectorsize = get_sectorsize(user);
695 int eccbytes = user->eccbytes;
698 if (!(user->isr & BIT(sector)))
701 atmel_pmecc_gen_syndrome(user, sector);
702 atmel_pmecc_substitute(user);
703 atmel_pmecc_get_sigma(user);
705 nerrors = atmel_pmecc_err_location(user);
746 bool atmel_pmecc_correct_erased_chunks(struct atmel_pmecc_user *user)
748 return user->pmecc->caps->correct_erased_chunks;
752 void atmel_pmecc_get_generated_eccbytes(struct atmel_pmecc_user *user,
755 struct atmel_pmecc *pmecc = user->pmecc;
759 for (i = 0; i < user->eccbytes; i++)
772 int atmel_pmecc_enable(struct atmel_pmecc_user *user, int op)
774 struct atmel_pmecc *pmecc = user->pmecc;
782 mutex_lock(&user->pmecc->lock);
784 cfg = user->cache.cfg;
791 writel(user->cache.sarea, pmecc->regs.base + ATMEL_PMECC_SAREA);
792 writel(user->cache.saddr, pmecc->regs.base + ATMEL_PMECC_SADDR);
793 writel(user->cache.eaddr, pmecc->regs.base + ATMEL_PMECC_EADDR);
802 void atmel_pmecc_disable(struct atmel_pmecc_user *user)
804 atmel_pmecc_reset(user->pmecc);
805 mutex_unlock(&user->pmecc->lock);
809 int atmel_pmecc_wait_rdy(struct atmel_pmecc_user *user)
811 struct atmel_pmecc *pmecc = user->pmecc;
825 user->isr = readl_relaxed(pmecc->regs.base + ATMEL_PMECC_ISR);
947 * resources are directly defined in the user pdev at position