[Skiboot] [PATCH V2 5/7] libflash: Delete file_file.[ch] files

Alistair Popple alistair at popple.id.au
Mon Jun 22 19:26:54 AEST 2015


Again, this looks similar to the last version of the the series so feel free
to add my Reviewed-By.

Reviewed-By: Alistair Popple <alistair at popple.id.au>

On Tue, 16 Jun 2015 19:01:08 Cyril Bur wrote:
> The new backend for blocklevel does this in a much neater way as much this
> hacky code is no longer needed.
> 
> Signed-off-by: Cyril Bur <cyril.bur at au1.ibm.com>
> ---
>  libflash/file_flash.c | 224 --------------------------------------------------
>  libflash/file_flash.h |  11 ---
>  2 files changed, 235 deletions(-)
>  delete mode 100644 libflash/file_flash.c
>  delete mode 100644 libflash/file_flash.h
> 
> diff --git a/libflash/file_flash.c b/libflash/file_flash.c
> deleted file mode 100644
> index d902672..0000000
> --- a/libflash/file_flash.c
> +++ /dev/null
> @@ -1,224 +0,0 @@
> -#include <unistd.h>
> -#include <sys/types.h>
> -#include <sys/stat.h>
> -#include <stdbool.h>
> -#include <stdlib.h>
> -#include <sys/ioctl.h>
> -#include <sys/mman.h>
> -#include <string.h>
> -
> -#include <mtd/mtd-abi.h>
> -
> -#include "file_flash.h"
> -
> -/* The caller is going to have to supply this */
> -struct file_flash_priv {
> -	int fd;
> -};
> -
> -/*
> - * Unfortunately not all file descriptors are created equal...
> - * Here we check to see if the file descriptor is to an MTD device, in which
> - * case we have to get the size of it differently.
> - */
> -int file_setup(struct spi_flash_ctrl *ctrl, uint32_t *tsize)
> -{
> -	struct mtd_info_user mtd_info;
> -	struct file_flash_priv *file_flash_data;
> -	struct stat sbuf;
> -
> -	if (!ctrl || !ctrl->priv)
> -		return -1;
> -
> -	file_flash_data = (struct file_flash_priv *)ctrl->priv;
> -
> -	if (fstat(file_flash_data->fd, &sbuf) == -1)
> -		return -1;
> -
> -	if (S_ISCHR(sbuf.st_mode)) {
> -		if (ioctl(file_flash_data->fd, MEMGETINFO, &mtd_info) == -1)
> -			return -1;
> -
> -		ctrl->finfo->size = mtd_info.size;
> -
> -	} else if (S_ISREG(sbuf.st_mode)) {
> -		ctrl->finfo->size = sbuf.st_size;
> -
> -	} else {
> -		/* Not going to be able to work with anything else */
> -		return -1;
> -	}
> -
> -	if (tsize)
> -		*tsize = ctrl->finfo->size;
> -
> -	return 0;
> -}
> -
> -int file_set4b(struct spi_flash_ctrl *ctrl, bool enable)
> -{
> -	/* Always report success no matter what, this isn't relevent for files */
> -	return 0;
> -}
> -
> -int file_chipid(struct spi_flash_ctrl *ctrl, uint8_t *id_buf,
> -		uint32_t *id_size)
> -{
> -	if (!ctrl || !ctrl->priv || !id_size || *id_size < 3)
> -		return -1;
> -
> -	id_buf[0] = 'M';
> -	id_buf[1] = 'T';
> -	id_buf[2] = 'D';
> -
> -	*id_size = 3;
> -	return 0;
> -}
> -
> -int file_read(struct spi_flash_ctrl *ctrl, uint32_t addr, void *buf,
> -		uint32_t size)
> -{
> -	int rc;
> -	struct file_flash_priv *file_flash_data;
> -
> -	if (!ctrl || !ctrl->priv)
> -		return -1;
> -
> -	file_flash_data = (struct file_flash_priv *)ctrl->priv;
> -
> -	rc = lseek(file_flash_data->fd, addr, SEEK_SET);
> -	if ((off_t )rc == (off_t )-1)
> -		return -1;
> -
> -	rc = read(file_flash_data->fd, buf, size);
> -	if (rc == -1)
> -		return -1;
> -	/* TODO Perhaps deal with short reads */
> -
> -	return 0;
> -}
> -
> -int file_write(struct spi_flash_ctrl *ctrl, uint32_t addr,
> -		const void *buf, uint32_t size)
> -{
> -	size_t rc;
> -	struct file_flash_priv *file_flash_data;
> -
> -	if (!ctrl || !ctrl->priv)
> -		return -1;
> -
> -	file_flash_data = (struct file_flash_priv *)ctrl->priv;
> -
> -	rc = lseek(file_flash_data->fd, addr, SEEK_SET);
> -	if ((off_t )rc == (off_t )-1)
> -		return -1;
> -
> -	rc = write(file_flash_data->fd, buf, size);
> -	if (rc != size)
> -		return -1;
> -	/* TODO Perhaps deal with short writes */
> -
> -	return 0;
> -}
> -
> -int file_erase(struct spi_flash_ctrl *ctrl, uint32_t addr,
> -		uint32_t size)
> -{
> -	struct stat sbuf;
> -	struct file_flash_priv *file_flash_data;
> -	uint32_t esize;
> -
> -	if (!ctrl || !ctrl->priv)
> -		return -1;
> -
> -	/*
> -	 * Input params addr = 0 and size = 0xffffffff mean libflash is telling us
> -	 * to erase the entire thing.
> -	 */
> -	file_flash_data = (struct file_flash_priv *)ctrl->priv;
> -
> -	esize = (size == 0xffffffff && addr == 0) ? ctrl->finfo->size : size;
> -	if (esize > ctrl->finfo->size)
> -		return -1;
> -
> -	if (fstat(file_flash_data->fd, &sbuf) == -1)
> -		return -1;
> -
> -	/*
> -	 * If we're dealing with an MTD device then its possible that there is a
> -	 * real flash device somewhere (as opposed to a regular file where the
> -	 * assumption is that there is not).
> -	 * In that case lets try to represerve that idea and use the erase ioctl.
> -	 */
> -	if (S_ISCHR(sbuf.st_mode)) {
> -		struct erase_info_user erase_info = {
> -			.start = addr,
> -			.length = esize
> -		};
> -
> -		if (ioctl(file_flash_data->fd, MEMERASE, erase_info) == -1)
> -			return -1;
> -
> -	} else if (S_ISREG(sbuf.st_mode)) {
> -		/* Regular file, erase is just write zeros */
> -		char *section;
> -
> -		section = mmap(NULL, sbuf.st_size, PROT_READ | PROT_WRITE, MAP_SHARED, file_flash_data->fd, 0);
> -		if (section == (void *)-1)
> -			return -1;
> -		bzero(section + addr, esize);
> -		if (munmap(section, sbuf.st_size) == -1)
> -			return -1;
> -
> -	} else {
> -		return -1;
> -	}
> -
> -	return 0;
> -}
> -
> -/* To be called by tools wanting to use the libflash/libffs APIs */
> -struct spi_flash_ctrl *build_flash_ctrl(int fd)
> -{
> -	struct spi_flash_ctrl *ctrl;
> -	struct file_flash_priv *data;
> -
> -	ctrl = calloc(1, sizeof(struct spi_flash_ctrl));
> -	if (!ctrl)
> -		return NULL;
> -
> -	data = calloc(1, sizeof(struct file_flash_priv));
> -	if (!data) {
> -		free(ctrl);
> -		return NULL;
> -	}
> -
> -	data->fd = fd;
> -
> -	/*
> -	 * Don't implement the low level interfaces because we aren't flash. This
> -	 * will also force libflash to only call us with the high level interface.
> -	 */
> -	ctrl->cmd_rd = NULL;
> -	ctrl->cmd_wr = NULL;
> -
> -	/*
> -	 * Do implement everything else.
> -	 */
> -	ctrl->erase = &file_erase;
> -	ctrl->write = &file_write;
> -	ctrl->read = &file_read;
> -	ctrl->chip_id = &file_chipid;
> -	ctrl->set_4b = &file_set4b;
> -	ctrl->setup = &file_setup;
> -
> -	ctrl->priv = data;
> -
> -	return ctrl;
> -}
> -
> -void free_flash_ctrl(struct spi_flash_ctrl *flash_ctrl)
> -{
> -	free(flash_ctrl->priv);
> -	free(flash_ctrl);
> -}
> diff --git a/libflash/file_flash.h b/libflash/file_flash.h
> deleted file mode 100644
> index dc6b5d7..0000000
> --- a/libflash/file_flash.h
> +++ /dev/null
> @@ -1,11 +0,0 @@
> -#ifndef __FILE_FLASH_H
> -#define __FILE_FLASH_H
> -
> -#include <libflash/libflash.h>
> -#include <libflash/libflash-priv.h>
> -
> -struct spi_flash_ctrl *build_flash_ctrl(int fd);
> -
> -void free_flash_ctrl(struct spi_flash_ctrl *flash_ctrl);
> -
> -#endif /* __FILE_FLASH_H */
> 



More information about the Skiboot mailing list