Lines Matching refs:swap

60 init_block_state(struct chip_swap *swap)
65 if (swap == NULL)
68 blk_state = malloc(swap->nof_blks * sizeof(struct block_state),
71 for (i = 0; i < swap->nof_blks; i++)
74 swap->blk_state = blk_state;
80 destroy_block_state(struct chip_swap *swap)
83 if (swap == NULL)
86 if (swap->blk_state != NULL)
87 free(swap->blk_state, M_NANDSIM);
91 create_buffers(struct chip_swap *swap)
99 block = malloc(swap->blk_size, M_NANDSIM, M_WAITOK);
101 SLIST_INSERT_HEAD(&swap->free_bs, block_space, free_link);
113 destroy_buffers(struct chip_swap *swap)
117 if (swap == NULL)
120 blk_space = SLIST_FIRST(&swap->free_bs);
122 SLIST_REMOVE_HEAD(&swap->free_bs, free_link);
127 blk_space = SLIST_FIRST(&swap->free_bs);
130 blk_space = STAILQ_FIRST(&swap->used_bs);
132 STAILQ_REMOVE_HEAD(&swap->used_bs, used_link);
137 blk_space = STAILQ_FIRST(&swap->used_bs);
142 swap_file_open(struct chip_swap *swap, const char *swap_file)
154 nand_debug(NDBG_SIM,"Cannot create swap file %s", swap_file);
159 swap->swap_cred = crhold(curthread->td_ucred);
165 swap->swap_vp = nd.ni_vp;
171 swap_file_close(struct chip_swap *swap)
174 if (swap == NULL)
177 if (swap->swap_vp == NULL)
180 vn_close(swap->swap_vp, FWRITE, swap->swap_cred, curthread);
181 crfree(swap->swap_cred);
185 swap_file_write(struct chip_swap *swap, struct block_state *blk_state)
194 if (swap == NULL || blk_state == NULL)
199 blk_state->offset = swap->swap_offset;
200 swap->swap_offset += swap->blk_size;
210 aiov.iov_len = swap->blk_size;
212 vp = swap->swap_vp;
219 auio.uio_resid = swap->blk_size;
224 VOP_WRITE(vp, &auio, IO_UNIT, swap->swap_cred);
232 swap_file_read(struct chip_swap *swap, struct block_state *blk_state)
240 if (swap == NULL || blk_state == NULL)
252 aiov.iov_len = swap->blk_size;
254 vp = swap->swap_vp;
261 auio.uio_resid = swap->blk_size;
265 VOP_READ(vp, &auio, 0, swap->swap_cred);
274 struct chip_swap *swap;
280 swap = malloc(sizeof(*swap), M_NANDSIM, M_WAITOK | M_ZERO);
282 SLIST_INIT(&swap->free_bs);
283 STAILQ_INIT(&swap->used_bs);
284 swap->blk_size = blk_size;
285 swap->nof_blks = nof_blks;
287 err = init_block_state(swap);
289 nandsim_swap_destroy(swap);
293 err = create_buffers(swap);
295 nandsim_swap_destroy(swap);
299 err = swap_file_open(swap, swap_file);
301 nandsim_swap_destroy(swap);
305 return (swap);
309 nandsim_swap_destroy(struct chip_swap *swap)
312 if (swap == NULL)
315 destroy_block_state(swap);
316 destroy_buffers(swap);
317 swap_file_close(swap);
318 free(swap, M_NANDSIM);
322 get_bs(struct chip_swap *swap, uint32_t block, uint8_t writing)
327 if (swap == NULL || (block >= swap->nof_blks))
330 blk_state = &swap->blk_state[block];
336 blk_space = SLIST_FIRST(&swap->free_bs);
338 SLIST_REMOVE_HEAD(&swap->free_bs, free_link);
339 STAILQ_INSERT_TAIL(&swap->used_bs, blk_space,
342 blk_space = STAILQ_FIRST(&swap->used_bs);
344 STAILQ_REMOVE_HEAD(&swap->used_bs, used_link);
345 STAILQ_INSERT_TAIL(&swap->used_bs, blk_space,
348 swap_file_write(swap, old_blk_state);
368 swap_file_read(swap, blk_state);
370 memset(blk_space->blk_ptr, 0xff, swap->blk_size);